X



プログラミング詳しいやつ来い!
■ このスレッドは過去ログ倉庫に格納されています
0001以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:19:52.534ID:cpxzwmYA0
インターフェースってどんなときに使うの?
0002以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:20:18.906ID:9gnqtqQ00
えっちな動画とか映すとき
0003以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:20:33.702ID:iv6g4S5d0
インターにフェイスが欲しい時!
0004以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:20:42.873ID:cpxzwmYA0
interfaceってやつ

こいつと継承の違いがわからん
上書き前提がインターフェースってイメージ?
0005以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:20:52.822ID:JdxjQPgP0
java?
0006以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:21:00.695ID:cpxzwmYA0
>>3
その欲しいときを教えてくれ!
0007以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:21:26.002ID:MuNOauYGM
プログラミングの質問はマジでChatGPTに聞いたほうが早いしわかりやすい
0008以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:21:29.955ID:4D9NOsE10
継承いらない
0009以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:21:34.966ID:gASIqF8+0
その言葉の通りだろ
接続するときの形式をある程度統一して整理したい時だ
知らんけど
0011以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:22:06.814ID:rhSFeWXg0
ストラテジーパターンで実装するとき
0012以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:22:17.204ID:cpxzwmYA0
>>5
全ての言語での話だけど
今はC#でUnityやってる
ダメージ用のインターフェースとか攻撃用のインターフェースとかいる?
ダメージや攻撃クラスを継承じゃだめなの?
0013以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:22:20.419ID:XTA4Qp3rd
継承とインターフェースを比べるのがよくわからん
抽象クラスって言いたいの?
0014以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:22:53.202ID:cpxzwmYA0
>>7
ChatGPTに登録するのくそめんどい
0015以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:23:05.377ID:cpxzwmYA0
>>8
なぜ?
0016以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:23:09.753ID:v34JJNB/0
IRefreshインターフェースでRefreshメソッドを用意するじゃん?
そうしたらIRefreshインターフェースを継承したクラスは全部IRefresh型として扱えるからRefreshメソッドを呼び出せる
で、IRefreshインターフェースさえ継承してれば子のクラスは何でもいいから
クラス毎に中身が違うRefreshメソッドを呼び出せる
0017以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:23:31.942ID:yQ3gh+R4a
シンセガイジ?
0018以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:23:34.029ID:cpxzwmYA0
>>10
いらないってのは言ってないけどどんなときに使えばいいのかっつー話をしてるんだよ
0019以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:24:02.545ID:cpxzwmYA0
>>9
整理整頓のためのクラスという認識か?
0020以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:24:18.952ID:cpxzwmYA0
>>11
すまんそのストラテジーパターンを教えてくれ
0021以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:26:24.069ID:cpxzwmYA0
>>13
例えばプレイヤー側とエネミー側があるとするじゃん?
そんでその両者で攻撃のダメージを食らう処理や攻撃を与える処理って共通だと思うのよ
そんでその部分を継承元として作る→プレイヤー、エネミークラスで継承+個別の処理を行う形とするわけ
そんでその継承元クラスはインターフェースにするのかわからない
0022以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:27:22.042ID:cpxzwmYA0
>>16
継承元クラスよりもインターフェース作ったほうが良い的な?
0023以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:28:45.651ID:cpxzwmYA0
今のところ継承元クラスだけ作って継承させてるけどどうなんだろうか?
0024以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:29:16.405ID:aRcp9S3Ha
ただの実装漏れ防ぎ
0025以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:29:24.927ID:I74K8Aau0
C#なら多重継承できないじゃん
インターフェースはいくつでもつけていいじゃん
0026以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:29:29.594ID:9gnqtqQ00
オープン・クローズドの原則の拡張だぞ
0028以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:30:37.854ID:cpxzwmYA0
>>25
なるほどそれ用のインターフェースなのか
多重継承させないやつだとインターフェース作る必要なし?
0029以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:31:15.032ID:HuMAtsslr
ポリモーフィズムってやつだな
0030以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:31:41.383ID:I74K8Aau0
インターフェースで済むならインターフェースで実装するべし
後でやっぱり他のクラス継承させようって思ったら、もう一回作り直さないとダメでしょ?
0031以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:32:42.894ID:v34JJNB/0
>>22
インターフェースはクラスや抽象クラスの継承より自由度が高くて多重継承も可能
言語にもよるけど
クラスの継承は「元クラスの機能拡張版を作りたい」場合に使って
インターフェースの継承は「このインターフェースを継承したクラスはこの機能があることを約束する」場合に使うイメージ
0032以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:34:02.212ID:cpxzwmYA0
なるほど
ならインターフェースで作るか…
インターフェースってメソッド名だけ定義して中身の処理は書けないんだっけか?
0033以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:34:52.377ID:cpxzwmYA0
継承元クラスとインターフェースは別物として考えたほうが良さそうだな
なんか
0034以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:36:18.009ID:I74K8Aau0
メソッド名だけでいいならインターフェース
メンバー変数も欲しいなら抽象クラス
デフォルトの実装も書きたいなら継承を使う
これが基本かな
0035以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:36:45.270ID:MZnmmPhy0
>>33
似てるけどな
縛りを与えることで目的が明確になるのがありがてえ
0036以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:39:02.880ID:RZGQnWnc0
>>21
一応それでもいいけど
もし他のオブジェクトにもダメージ入れたくなった時に便利
if(obj is Character)
else if (obj is Block)
else if (obj is Car)
else if (obj is Item)
...

がif(obj is Idamage)の一文で済む
0037以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:39:30.773ID:/IEjG4tkM
クラス作るときはこの形で作ってね
っていう雛形のイメージ
0038以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:41:16.872ID:v34JJNB/0
クラスの継承は上下関係
「人類」クラスを継承した「新人類」クラスを作りてぇって感じ

インターフェースはジャンルの設定
「人類」クラスにも「犬類」クラスにも「哺乳類」の機能を持たせてぇって感じ
0039以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:43:30.311ID:cpxzwmYA0
今こんな形で作ってる
共通のAttackClass
public class Attack : MonoBehaviour
{

[SerializeField]
private Collider[] colliderList;//←当たり判定用のコライダーのリストを指定する。(エディター上で追加していく)

private Collider attackCollider;



 public void OnAttackStart(int attackNumber)//←当たり判定用のコライダーをオンにする(コライダーを常時オンにしておくと攻撃モーションじゃなくても攻撃が入ってしまうから)
{
attackCollider=colliderList[attackNumber];//与えられた攻撃種類のIDからそれに合わせた当たり判定コライダーを選んで
attackCollider.enabled = true;//オン状態にする
}

public void OnAttackFinished()//←攻撃モーションが終わったらオンにしていたコライダーをオフにしている
{
attackCollider.enabled = false;
}

public void OnHitAttack(Collider collider,int attackPoit)//コライダーが当たったら攻撃ポイント分当たったもののHPを減算する処理
{
var targetHP = collider.GetComponent<DamageSystem>();
if (null == targetHP) return;
targetHP.Damage(attackPoit);
}

}

Player側
namespace CharacterSystem.Players

{
public class PlayerCombat :Attack //←Attackクラスを継承しておりOnAttackStart関数やOnAttackFinished関数が自動的に実行される?まだ試していない
{
  //Attackの他に攻撃を回避する動作や回復動作を入れるつもり←これはエネミーでの実装はないからここのみの実装となる

}
}
こんな形でやってる
0040以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:44:22.965ID:cpxzwmYA0
>>34
なるほど
では今回のパターンは継承の方がよさそうかな?
0041以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:45:54.862ID:cpxzwmYA0
>>36
これはIdamegeインターフェースを持っているクラス全てに対してという意味でしょうか?
0042以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:46:26.662ID:I74K8Aau0
がっつりメンバーとか関数定義書いてるから、大人しく継承した方が良さそうだね
0043以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:46:26.984ID:v34JJNB/0
クラスを継承するにしてもインターフェースは作っといた方が良いぞ
0044以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:46:46.519ID:K9bPsx990
質問:
プログラミングにおける抽象クラスとインターフェースの違いについて、小学生にでもわかるように説明しなさい。

人工知能:
わかった、小学生にもわかるように説明するね。
抽象クラスとインターフェースは、プログラミングの世界で、コンピュータにどんな動作をさせるか指示するための道具箱のようなものだよ。
まず、抽象クラスは、ちょっとした設計図のようなもので、どんな機能があるかを示しているんだ。ただし、どのようにその機能を実現するかはちょっとわからない部分があるんだよね。それを具体的にどう動かすかは、他のプログラマがその設計図をもとに実際の機能を作り出すことになるんだ。
それに対して、インターフェースは、もっとシンプルで、どんな機能があるかだけをリストアップしているものだよ。これはまるで、約束事のようなもので、「このインターフェースを使うなら、こういう機能が必ず使えるようにしなさい」という指示だね。具体的にどう動かすかは、実際にそのインターフェースを使うプログラマが決めることになるんだ。
つまり、抽象クラスは「設計図」のようなもので、インターフェースは「約束事」のようなものだと思ってもらえればわかりやすいかな。どちらも、プログラムを作るときに役立つ道具箱の一部なんだよ。
0045以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:47:48.987ID:v34JJNB/0
ちなみにC#ならインターフェースにプロパティかけるから
マジでクラス継承の出番が少ない
メンバー変数を使わなくても良いシーンが多いからな
0046以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:48:41.624ID:cBFZuatd0
モジュール間の密結合を避ける為に使う
0047以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:48:43.687ID:I74K8Aau0
へープロパティ書けるんだ
10年前に触っただけだからその時とは仕様変わったんかね
0048以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:48:52.266ID:cpxzwmYA0
>>38
なるほど階層ではなく分類的に使っていくものか
0049以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:50:14.241ID:RZGQnWnc0
>>41
public interface IDamage
{
void Damage(int value);
}

void OnTriggerEnter2D(Collider2D collision)
{
collision.gameObject.GetComponent<IDamage>()?.Damage(5);
}
0050以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:50:30.898ID:cpxzwmYA0
>>43
そうなのか、、、
どんな感じで実装すればいいのかわからん
上で言うAttackClassにIAttackInterFaceをつける感じ?
0051以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:51:07.693ID:cpxzwmYA0
>>42
今回は継承か
0052以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:52:15.772ID:cpxzwmYA0
>>45
そうなのか
じゃあインターフェースで書き直した方がよい?
0053以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:53:28.821ID:RZGQnWnc0
>>49
途中送信しちゃった
こう書けば触れたオブジェクトからIDamageを継承したObjectを自動的に抽出してダメージを与えてくれる(本当はGetComponentsの方がいいけど)
IDamageを実装しているクラスならなんでも自動的に攻撃してくれる
0054以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:54:18.694ID:cpxzwmYA0
>>49
GetComponentでIDamageインターフェースを持つすべてのものに対してって感じか
Damageメソッドは別のクラスに実装していないとだめですよね?
0055以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:54:51.784ID:cpxzwmYA0
>>53
なるほど
0056以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:55:57.133ID:cpxzwmYA0
>>44
なるほど指示系統みたいな感じか
0057以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:56:35.732ID:epsIY8v00
来たやで~w
0058以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:58:50.299ID:oIm8wbzV0
実装はわかんない(未公開)けど同じメソッドを持たせるときに使うのが Interface
たとえば、Android と iOS でブラウザを開こうとするじゃん?
その時 Android は Intent を飛ばすが、iOS は NSApp のメソッドを呼ぶ
やることは同じなのに違う実装になる
その時、BrowserInterface と Open っていうメソッドを定義して、Android と iOS でそれを実装すれば、Android , iOS どちらでも BrowserInterface.Open を呼べばブラウザが開く
こんな感じで実装が違うけど同じ事やらせたいな~って時にInterfaceを使う
0059以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:59:23.981ID:RZGQnWnc0
>>52
ちなみにインターフェイスを基底クラスに実装しておけば
派生クラスはインターフェイスを実装したことになってるぞ!
だから継承がしっかりできてるならあんまり直さなくてもいい
0060以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 17:59:50.382ID:v34JJNB/0
>>50
そういう使い方でいいと思う
細かくしすぎてもゴチャゴチャするから
どれをインターフェース化するかは慣れとセンス

例えば公式のListクラスなんかコレクション系のインターフェースを大量に継承してたりもする
https://i.imgur.com/2ouGbK5.png
0061以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 18:01:43.439ID:b/hjrMeB0
>>14
ショートカットキーとかもそうだけど便利な機能の習得自体をめんどくさがる奴はIT向いてないぞ
0062以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 18:09:41.368ID:vxNwKwLG0
デコレータパターンとかだとメリットが分かりやすい
サンプルコードみてみろ
0063以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 18:22:10.602ID:U9Z/mkzV0
>>14
こんなことやりたいって書けばサンプルコード書いてくれるし、APIの使い方とかどんな時に使うのかとかの解説も丁寧でいいよ
0064以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 18:23:05.681ID:cpxzwmYA0
>>60
List継承やばw
0065以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 18:28:00.620ID:cpxzwmYA0
>>61
>>63
サインイン出来ねぇってさ
ま~じで死んでほしい
0066以下、5ちゃんねるからVIPがお送りします
垢版 |
2023/04/08(土) 18:42:47.269ID:CRPzUv4er
コード書きながら構造考えるなよ。継承だのコンポジションだの言うのはある程度の要素書き出してからだろ。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況