Month: March 2025

基礎コース最終回の講義メモとご案内

講義メモ:memo20250315.txt ご案内: ・このサイトは残しておきますがいつかは消えますのでご了承ください ・なお、来月からの応用コースにおいて、このサイトをそのまま用いますので、応用コースを受講しない方も閲覧可能です (ただし、応用コースの内容に関する質問はご遠慮ください) ・【ご参考】ゲーム開発で学ぶC言語入門 プロのクリエイターが教える基本文法と開発技法 GO!  ※来月からのヒューマンアカデミーのプログラマ専攻1年生の講義で用います(私が担当します) ・池田さん、メッセージをありがとうございました。

講義メモ 第10章 インターフェイス

p.255 インターフェイス ・元の意味は「接合部/面」で「異なる要素を関連付ける仕掛け」 ・C#では、継承関係にないクラスであっても、関連付けられる仕組み ・例えば、空中シューティングゲームで、飛んでいるドラゴンとF16戦闘機を「飛べるもの」インターフェイスでまとめて扱うことができる ・インターフェイスは文法では抽象クラスの拡張形式で「抽象メンバのみをもった参照型」となる ・書式: interface インターフェイス名 { 抽象メンバ … } ・インターフェイスに記述できる抽象メンバとしては、抽象メソッド、抽象プロパティ、抽象インデクサがある  ※ (Javaとは異なり)データメンバは記述できない ・例: interface Flyable { string HowToFly(); } //「飛べるもの」インターフェイスに飛び方を返すメソッドがある ・なお、インターフェイスの中に記述した抽象メンバは「abstract」は不要 ・インターフェイスの中の抽象メソッドの書式: 戻り値型 メソッド名(引数型 引数,…); ・インターフェイスの中の抽象プロパティの書式: データ型 プロパティ名 { get; set; } ・インターフェイスの中の抽象インデクサの書式: データ型 this[インデックス型 インデックス名 { get; set; } p.256 インターフェイスの実装 ・クラスの継承と同じ形式で、インターフェイスの実装が可能 ・なお、クラスの継承とことなり、インターフェイスの実装は複数行って良い ・書式: class クラス名 : インターフェイス名,… {…} ・例: class F16 : Flyable {…} //F16戦闘機は「飛べるもの」 ・例: class Dragon : Flyable, Swimable {…} //ドラゴンは「飛べるもの」で「泳げるもの」 ・インターフェイスを実装したクラスでは、インターフェイスにある抽象メンバをオーバーライドする必要がある ・しかし、これは継承におけるオーバーライドとは区別され、override指定は不要で、通常、publicにする ・例: class F16 : Flyable { public string HowToFly() { return "エンジンで";} } //F16戦闘機は「飛べるもの」 作成例 //p.257 interface01.cs using System; interface IMyInterface { //インターフェイスの定義     void show(string str); //抽象メソッド     int xprop { get; set; } //抽象プロパティ     int this[int i] { get;…

Read the full article

講義メモ

・p.243「クラスの継承とコンストラクタ」から p.243 クラスの継承とコンストラクタ ・どのクラスにおいても、コンストラクタを記述しないと、自動的に引数のないコンストラクタが用意される ・これは派生クラスでも同様 ・しかし、派生クラスのコンストラクタの前には自動的に基本クラスのコンストラクタが実行される ・これにより、基本クラスから継承したデータメンバの初期化を基本クラスのコンストラクタに任させることができる ・基本クラスに引数を持つコンストラクタがあり、派生クラスにも引数を持つコンストラクタがある場合、引数を受け渡す必要があるので、baseキーワードを用いる ・書式: public 派生クラス名(型 引数,…) : base (受け取りたい引数,…) {…} p.243 inheritance06.cs //p.243 inheritance06.cs using System; class MyBase { //基本クラス     protected int x;     public MyBase() { //コンストラクタ(引数なし)         Console.WriteLine("ここはMyBase");         x = 10; //データメンバの初期化     } } class Derived1 : MyBase { //派生クラス     //ここに「protected int x;」があるとみなされる     public Derived1() { //コンストラクタ(引数なし)         //ここでMyBaseのコンストラクタを実行         Console.WriteLine("ここはDerived1");         x = 20; //データメンバの初期化     } } class Derived2 : Derived1 { //派生の派生クラス     //ここに「protected int x;」があるとみなされる     public Derived2() { //コンストラクタ(引数なし)         //ここでDerived1のコンストラクタを実行(中で)         Console.WriteLine("ここはDerived2");         x = 30; //データメンバの初期化     }     public void show() { //独自のメソッド         Console.WriteLine("x = {0}", x);     } } class inheritance06 {     public static void Main() {         Derived2 d2 = new Derived2(); //派生の派生クラスのコンストラクタを実行(3つのコンストラクタが動作)         d2.show(); //x = 30…

Read the full article

今週の話題

ゲームソフト販売本数ランキング:今週1位も「モンスターハンターワイルズ(PS5)」GO! 【緊急告知!】Game*SparkとAUTOMATONでイベント!阿佐ヶ谷ロフトAでゲームメディアの現状語り合うリアルイベント開催(オンライン配信もあるよ) GO! 『Pokémon GO』『ピクミンブルーム』『モンスターハンターNow』サウジアラビア系企業へ売却―継続してサービスは提供 GO! 当初3万人以上集うも…2ヶ月後には30分の1―新作F2Pシューターたった半年でサービス終了へ。開発スタジオもまもなく閉鎖 GO! 『GTA V』のテイクツーが「改造アカウント」販売中国企業を提訴―“リアルな裏社会”で1億ドル以上の利益か GO!

前回のコメント

・今回もありがとうございました。 ・今回もありがとうございました。  次でとうとう最終回ですね。少々寂しいですが頑張ります。  次回もよろしくお願いします。  基礎コースラストまでしっかり進めましょう。  こちらこそ、よろしくお願いいたします。 ・本日もありがとうございました。  お送り致します。ITパスポート問題集1週したのみですが、  1夜漬けになりますができる限り、頑張ります!  資格は武器ですので、取得や使い方のコツがわかると強いですね。  合格を祈念しています。

講義メモ 第9章 継承

p.223 9.1 クラスの継承の基礎 ・クラスは乱立しやすく、同じことが複数のクラスに記述されてしまったり、適切なクラスを探しづらい ・そこで、クラスに親子関係を持たせるのが継承 ・親になるクラスを基本クラス、子になるクラスを派生クラスといい、派生クラスは基本クラスを継承するという ・派生クラスの書式: class 派生クラス名 : 基本クラス名 {…} ・例: class HoimiSlime : Slime {…} ・C#では派生クラスの基本クラスは1つのみで、基本クラスの派生クラスはいくつでもOK(単一継承という) ・基本クラスのpublicメンバ定義はすべて派生クラスに引き継がれる(継承される) ・基本クラスを書き換えると、自動的に反映するので「同じことが複数のクラスに記述される」ことが防止できる ・例: class Slime { public int hp; } ・例: class HoimiSlime : Slime { public int mp; } //hpは記述しなくてもSlimeから継承される ・継承のことをインヘリタンスともいう p.224 inheritance01.cs //p.224 inheritance01.cs using System; //基本クラス class MyBase {     public int a = 10; //継承可能なデータメンバ     public void BaseMethod() { //継承可能なメソッド         Console.WriteLine("ここは基本クラスです");     } } //派生クラス class MyDerived : MyBase { //MyBaseクラスを継承     //ここに public int a = 10; があるとみなされる     //ここに public void BaseMethod() {…} があるとみなされる     public int b = 20; //派生クラス独自のデータメンバ     public void DerivedMethod() { //派生クラス独自のメソッド         Console.WriteLine("ここは派生クラスです");     } } class inheritance01 {     public static void Main() {         MyDerived md =…

Read the full article

講義メモ

・p.222 練習問題をクリアして、第9章に進みます p.222 練習問題1 ヒント ・p.209 prop02.csを単純化すると良い ・double型のデータメンバ1つのみになる ・Mainメソッドで負の数や0を与えて動作を確認すること 作成例 //p.222 練習問題1 using System; class BMI {     double bw;     public double bwprop { //プロパティ         set {             if (value > 0) { //代入値が正の数なら                 bw = value; //代入値を代入             }         }         get {             return bw; //値を返す         }     } } class prop02 {     public static void Main() {         BMI mybmi = new BMI();         mybmi.bwprop = 5; //プロパティbwpropのsetアクセッサを呼ぶ         Console.WriteLine(mybmi.bwprop); //プロパティbwpropのgetアクセッサを呼ぶ         mybmi.bwprop = -5; //プロパティbwpropのsetアクセッサを呼ぶ(負の数なので無視される)         Console.WriteLine(mybmi.bwprop); //値は変わらない     } } p.222 練習問題2 ヒント ・p.217 indexer03.csをベースにすると良い ・コンストラクタで生徒数を入力する部分は、p.214 indexer02.csが参考になる ・生徒名を格納するstring型配列と、点数を格納するint型配列を宣言して用いると楽  ※ 生徒名と点数をメンバとするクラスオブジェクトの配列にできればさらに良い ・要素の生成はコンストラクタで行うと良い ・Mainメソッドで格納結果を表示すること 作成例 //p.222 練習問題2 using System; class MyIndexer {     int[] point; //点数の配列を宣言     string[] name; //名前の配列を宣言     int num; //要素数     public MyIndexer(int n) { //要素数nを受け取るインデクサ         point = new…

Read the full article

今週の話題

ゲームソフト販売本数ランキング:今週1位は「モンスターハンターワイルズ(PS5)」GO! 『モンハンワイルズ』3月10日以降に配信予定の修正パッチが公開。特定の手順で一部アイテムや報酬をくり返し入手できる問題、捕獲ネットを放っても魚が退場しない不具合などが修正 GO! ポータブルゲーミングPC“AYANEO 3”が6月中旬発売! 7インチモニター搭載で携帯ゲーム機のようにSteamのゲームが快適に遊べる GO! ガンホーは3期連続で最終利益が2桁減益、アクティビストの台頭で今期の株主総会は波乱含みに?【ゲーム企業の決算を読む】 GO! 闇バイトなど詐欺被害を学ぶ「投資詐欺体験チャット」公開 GO! 中国国内向けの日本アニメ海賊版サイト&アプリ運営者が著作権法違反の疑いで逮捕 河北省で初の刑事摘発 GO! リマスター版『The Last of Us』シリーズなどに携わったVisual Artsでレイオフ実施―PlayStation Studios Malaysiaのチームも対象とスタッフ報告も GO! 2021年からの海賊版を巡る長い戦いは任天堂完全勝利―任天堂、海賊版サイトとの訴訟にフランス最高裁判所で勝利と海外メディア報じる GO! 任天堂が偽造amiibo業者への訴訟で約10億円以上を勝ち取る!将来の偽造行為に対する抑止力として期待が高まる GO!

前回のコメント

・本日もありがとうございました! ・ありがとうございました。 ・今回もありがとうございました。  駆け足で追いつくのが大変でしたが頑張ります。  次回もよろしくお願いします。  残り少なくなってきましたね。  こちらこそ、よろしくお願いいたします。 ・本日の授業は下記内容で合ってますでしょうか。  インデックスは添え字。箱の番号  プロパティはチーム運営でルール付けや制御ができる。  インデクサは配列の型を関係なく、添え字として使用して、引っ張ってくることができるという事なんですね。  合っている部分とそうではない部分があります。  インデックスは複数のデータを持つ構造から1要素を指す方法で、  配列の場合は添字(0以上の整数)です。インデクサの場合は型を問いませんので、インデックスと呼んでいます。  プロパティはデータメンバを保護する仕掛けで、クラス側でルールを設定することで、  チーム開発で起こりやすいミスを防ぐ効果があります。  また、不都合なデータが格納されないので、データのチェックを省きシンプルにすることができます。  インデクサはオブジェクト名にインデックスを指定することで、  クラス内部で用意されたデータ構造から1要素を指すことができます。  要素をどう返すかはクラス内部に定義できますので、インデックスの型が自由なのもメリットです。