継承の概念と用語 元クラスAA 元のクラス メンバー(フィールド) 変数x,変数y 配列z 新クラス 新クラスAB 追加メンバー 変数 v

Slides:



Advertisements
Similar presentations
1 C++ における OOP を用いた 書き方講座 H 山崎貴英. 2 今回の内容 OOP とは? C++ の超基礎 注釈 書いてあるコードはすべて一部抜粋。 コピペだと動かないよ!
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
2001年11月更新 2章 Windowプログラムの構成 Windowsプログラムおよび       PiasTkプログラムの基本構造.
         第9回 Swing.
Applet 岡部 祐典 鈴木 敬幸.
第5回 iPhoneアプリ開発勉強会 Objective-C 「継承とクラス」
アルゴリズムとデータ構造1 2007年6月12日
Iアプリプログラミング その1  鳥居秀徳.
アルゴリズムとプログラミング (Algorithms and Programming)
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
アルゴリズムとプログラミング (Algorithms and Programming)
社会人学習講座 「Javaプログラミング概論」
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
プログラミング演習3 第2回 GUIの復習.
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
EVENT プログラミングのスタイル 手続き型: ある決められた場所から開始され, その後は純粋に上から下に流れて行く方式. 実行したいことを, 順番に記述してゆく. 逐次処理形式コーディングの方法である。 今までの授業(情報処理2や3)で 行ってきたプログラミングの演習 bcc32やmake 手続き型.
プログラミング演習3 第3回 ミニプロジェクト.
暗黙的に型付けされる構造体の Java言語への導入
フォームのデザイン Labelコントロール変更点 (name): labelDate Font Size: 18pt
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
TCanvas BCB:TCanvasクラスでグラフィックを扱う。 TFormなどもプロパティとして持っている。
第11週:super/subクラス、継承性、メソッド再定義
Nakano School of Business 経営情報ビジネス科 【 Java概論(Test5)】
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
プログラミング演習3 第2回 GUIの復習.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
Java8について 2014/03/07.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
オブジェクトのプロパティ プロパティとは? あたかもそういうメンバー変数(フィールド)がそのクラスに存在するかのように見せる仕組み!
もっと詳しくArrayクラスについて調べるには → キーワード検索
プログラミングⅠ 平成30年10月15日 森田 彦.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミングⅠ 平成30年10月22日 森田 彦.
GUIプログラミングの基本=イベント イベントとは イベントの例 ウィンドウやウィンドウ内のパーツ(ボタン・スクロールバーなど)に発生する
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
サブゼミ第7回 実装編① オブジェクト型とキャスト.
画面への描画 Graphics オブジェクト 紙 ペン Pen オブジェクト Brush オブジェクト 画面のピクセルをカプセル化
第5回 プログラミングⅡ 第5回
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
メンバとメソッド C言語の構造体 変数の集まり C#言語のクラス + それを処理する関数の集まり フィールド または メンバ変数 メンバ
JAVA入門⑥ クラスとインスタンス.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
プログラミング 2 静的変数.
Presentation transcript:

継承の概念と用語 元クラスAA 元のクラス メンバー(フィールド) 変数x,変数y 配列z 新クラス 新クラスAB 追加メンバー 変数 v 派生する 導出する ベースクラス スーパークラス 基本クラス 親クラス 派生クラス サブクラス 導出クラス 子クラス 継承の概念と用語 プロパティ p1 元クラスAA メンバー(フィールド) 変数x,変数y 配列z 新クラスAB 追加メンバー 変数 v メソッド func1 元のクラス 新クラス プロパティ p2 メソッド func2 新プロパティ p2 新メソッド func2 メソッドの再定義 (関数定義の変更) → オーバーライド

× ○ アクセス修飾子のまとめ アクセス範囲 private protected public クラスの作成者のみが使える クラス外 派生クラス内 クラス内 private × ○ protected public クラスの利用者なら誰でも使える 派生クラスを作成する人は使える その他に,internal,prtected internal等のアクセス修飾子があるが,説明省略

クラスの階層構造とクラスライブラリ クラス Object 継承 全てのクラスの元になる スーパー ベースクラス Object クラス A クラス X 継承 継承 クラス B クラス Y 継承 継承 C#では,プログラマが定義したクラスは自動的にObjectクラスを継承している →Objectクラスのメソッドを用いることができる クラス C クラス Z 継承 継承 クラス D1 クラス U1 クラス D2 クラス U2 クラス D3

システムで提供されるクラスライブラリの一部 System.Object System.Activator System.AppDomainSetup ---- System.IAppDomainSetup System.Array ---- System.ICloneable, System.Collections.IList, System.Collections.ICollection, System.Collections.IEnumerable System.Attribute System.AttributeUsageAttribute System.CLSCompliantAttribute System.ContextStaticAttribute System.FlagsAttribute System.LoaderOptimizationAttribute System.MTAThreadAttribute System.NonSerializedAttribute System.ObsoleteAttribute System.ParamArrayAttribute System.SerializableAttribute System.STAThreadAttribute System.ThreadStaticAttribute System.BitConverter System.Buffer System.CharEnumerator ---- System.Collections.IEnumerator, System.ICloneable System.Console System.Convert System.DBNull ---- System.Runtime.Serialization.ISerializable, System.IConvertible System.Delegate System.MulticastDelegate System.AssemblyLoadEventHandler System.AsyncCallback System.CrossAppDomainDelegate System.EventHandler System.ResolveEventHandler System.UnhandledExceptionEventHandler System.Environment System.EventArgs System.AssemblyLoadEventArgs System.ResolveEventArgs System.UnhandledExceptionEventArgs System.Exception System.ApplicationException System.SystemException System.AppDomainUnloadedException System.ArgumentException System.ArgumentNullException System.ArgumentOutOfRangeException System.DuplicateWaitObjectException System.Reflection.MemberInfo System.Type ---- System.Reflection.IReflect System.String ---- System.IComparable, System.ICloneable, System.IConvertible, System.Collections.IEnumerable System.TimeZone System.UriBuilder System.ValueType System.ArgIterator System.Boolean ---- System.IComparable, System.IConvertible System.Byte ---- System.IComparable, System.IFormattable, System.IConvertible System.Char ---- System.IComparable, System.IConvertible System.DateTime ---- System.IComparable, System.IFormattable, System.IConvertible System.Decimal ---- System.IFormattable, System.IComparable, System.IConvertible System.Double ---- System.IComparable, System.IFormattable, System.IConvertible System.Enum System.AttributeTargets System.DayOfWeek System.Environment.SpecialFolder System.LoaderOptimization System.PlatformID System.TypeCode System.UriHostNameType System.UriPartial System.Guid ---- System.IFormattable, System.IComparable System.Int16 ---- System.IComparable, System.IFormattable, System.IConvertible System.Int32 ---- System.IComparable, System.IFormattable, System.IConvertible System.Int64 ---- System.IComparable, System.IFormattable, System.IConvertible System.IntPtr ---- System.Runtime.Serialization.ISerializable System.RuntimeArgumentHandle System.RuntimeFieldHandle ---- System.Runtime.Serialization.ISerializable System.RuntimeMethodHandle ---- System.Runtime.Serialization.ISerializable System.RuntimeTypeHandle ---- System.Runtime.Serialization.ISerializable System.SByte ---- System.IComparable, System.IFormattable, System.IConvertible System.Single ---- System.IComparable, System.IFormattable, System.IConvertible System.TimeSpan ---- System.IComparable System.TypedReference System.UInt16 ---- System.IComparable, System.IFormattable, System.IConvertible System.UInt32 ---- System.IComparable, System.IFormattable, System.IConvertible System.UInt64 ---- System.IComparable, System.IFormattable, System.IConvertible System.UIntPtr ---- System.Runtime.Serialization.ISerializable System.Void System.Version ---- System.ICloneable, System.IComparable System.WeakReference ---- System.Runtime.Serialization.ISerializable System.ArithmeticException System.DivideByZeroException System.NotFiniteNumberException System.OverflowException System.ArrayTypeMismatchException System.BadImageFormatException System.CannotUnloadAppDomainException System.ContextMarshalException System.ExecutionEngineException System.FormatException System.UriFormatException System.IndexOutOfRangeException System.InvalidCastException System.InvalidOperationException System.ObjectDisposedException System.InvalidProgramException System.MemberAccessException System.FieldAccessException System.MethodAccessException System.MissingMemberException System.MissingFieldException System.MissingMethodException System.MulticastNotSupportedException System.NotImplementedException System.NotSupportedException System.PlatformNotSupportedException System.NullReferenceException System.OutOfMemoryException System.RankException System.StackOverflowException System.TypeInitializationException System.TypeLoadException System.DllNotFoundException System.EntryPointNotFoundException System.TypeUnloadedException System.UnauthorizedAccessException System.GC System.LocalDataStoreSlot System.MarshalByRefObject System.AppDomain ---- System._AppDomain, System.Security.IEvidenceFactory System.ContextBoundObject System.Uri ---- System.Runtime.Serialization.ISerializable System.Math System.OperatingSystem ---- System.ICloneable System.Random

名前空間 システムで定義されたクラス Message ユーザーが独自に定義したクラス Message 同じ名前なので問題が発生 (バッティング) Message 名前空間 System System.Message Message 名前空間 User User.Message

名前空間の利用 正式な名前 名前空間名 クラス名 メソッド名 名前空間の例 名前空間Systemの利用を宣言 名前空間名を省略 System class kadai70 {   static void Main()   {     System.Console.WriteLine("Hello World!");   } } 正式な名前 名前空間名 クラス名 メソッド名 名前空間の例 System System.Windows System.Windows.Form System.Text System.Drawing System.Drawing.Drawing2D Microsoft.Win32 これらは,それぞれ異なった名前空間 using System; class kadai70 {   static void Main()   {     Console.WriteLine("Hello World!");   } } 名前空間Systemの利用を宣言 ドットで区切って長い名前空間を定義できる 名前空間名を省略

名前空間の定義 キーワードnamespaceを用いて 名前空間Matsushimaの宣言 正式なクラス名は Matsushima.Time {   class Time   {    protected int min;    public int Minute    { ・・・ }     // 省略   }   class kadai70     static void Main()     {       Time t;       // 省略     } } 正式なクラス名は Matsushima.Time になる この内部で定義したクラスは,すべて Matsushima.xxxxx となる

+ クラスライブラリの利用 コンパイル System.Windows.Forms.dllへの参照設定 プログラムの実行! class kadai81a {   public static void Main()   {     System.Windows.Forms.MessageBox.Show(          "松島(各自が自分の名前を入れる)のメッセージボックスが出たぞ","基礎計算機演習");   } } using System.Windows.Forms; class kadai81a {   public static void Main()   {     MessageBox.Show("松島(各自が自分の名前を入れる)のメッセージボックスが出たぞ","基礎計算機演習");   } } System.Windows.Forms名前空間を利用することを宣言 → クラスの正式名称を省略できる コンパイル System.Windows.Forms.dllへの参照設定 クラスライブラリの 実行ファイル (System.Windows.Forms.dll) + 実行プログラム ファイル (例えば kadai81a.exe) クラスライブラリファイルSystem.Windows.Forms.dllと結合して(リンクして)実行することを宣言 プログラムの実行! 注) 実行ファイルは,通常,プロジェクト名に.exeが付いたファイル. プロジェクトフォルダ内のdebugフォルダやreleaseフォルダにある.

グラフィカルユーザーインターフェースのクラス Graphical User Interface; GUI グラフィカルユーザーインターフェースのクラス System.Windows.Forms名前空間 GUIの中心になるウインドウズフォームのクラスが定義されている名前空間 namespace Matsushima {   using System.Windows.Forms;   class MyWindow : Form   {     public MyWindow() {}   }   class koushu8a     public static void Main()     {       MyWindow mw = new MyWindow();       Application.Run(mw);     } } Formクラスを継承した自分用の クラス MyWindow MyWindowクラスのインスタンス作成 Applicationクラスの静的メソッドRun() MyWindowクラスをアプリケーションとして実行する 注)このソースのコンパイルと実行には, System.Windows.Forms.dllへの参照設定 が必要

Formクラスから継承されたプロパティの設定 Formのプロパティを使う namespace Matsushima {   using System.Windows.Forms;   class MyWindow : Form   {     public MyWindow() {}   }   class koushu8b     public static void Main()     {       MyWindow mw = new MyWindow();       mw.Text = "これは松島のウィンドウだ";       mw.Height = 100;       mw.Width = 500;       Application.Run(mw);     } } 注)このソースのコンパイルと実行には, System.Windows.Forms.dllだけではなく, Sysutem.dllへの参照設定も必要 Formクラスから継承されたプロパティの設定

Console.WriteLine()メソッドはコンソールウィンドウに文字を出力する プロパティの設定だけではできないこと ウィンドウ内に文字を描画する namespace Matsushima {   using System.Windows.Forms;   class MyWindow : Form   {     public MyWindow() {}   }   class koushu8b     public static void Main()     {       MyWindow mw = new MyWindow();       mw.Text = "これは松島のウィンドウだ";       mw.Height = 100;       mw.Width = 500;       Console.WriteLine("ウィンドウ内に文字を書いたぞ!");       Application.Run(mw);     } } Console.WriteLine()メソッドはコンソールウィンドウに文字を出力する

Formクラスのプロテクトメソッド OnPaint() を派生クラスでオーバーライドしている ウィンドウ内に文字を書く方法(正解) namespace Matsushima {   using System.Windows.Forms;   using System.Drawing;   class MyWindow : Form   {     public MyWindow() {}     protected override void OnPaint(PaintEventArgs pea)     {       Graphics grfx = pea.Graphics;       grfx.DrawString("ウィンドウ内に文字を書いたぞ!",           Font, Brushes.Black, 50, 35);     }   }   class koushu8c     public static void Main()       MyWindow mw = new MyWindow();       mw.Text = "これは松島のウィンドウだ";       mw.Height = 100;       mw.Width = 500;       Application.Run(mw); } Formクラスのプロテクトメソッド OnPaint() を派生クラスでオーバーライドしている 問題: メソッドOnPaint()はいったいいつ呼び出されて実行されているのか?? 注)このソースのコンパイルと実行には, System.Windows.Forms.dll,System.dll, System.Drawing.dllへの参照設定が必要

マウスの関係する処理 マウスがウィンドウ上に入ってきたらウィンドウの背景色を赤にする namespace Matsushima {   using System.Windows.Forms;   using System.Drawing;   using System;   class MyWindow : Form   {     public MyWindow() {}     protected override void OnMouseEnter(EventArgs ea)     {       this.BackColor = Color.Red;     }     protected override void OnMouseLeave(EventArgs ea)       this.BackColor = DefaultBackColor;   }   class koushu8d     public static void Main()       MyWindow mw = new MyWindow();       mw.Text = "これは松島のウィンドウだ";       mw.Height = 100;       mw.Width = 500;       Application.Run(mw); } マウスがウィンドウ上に入ってきたらウィンドウの背景色を赤にする マウスがウィンドウ上から出て行ったらウィンドウの背景色を元に戻す 注)このソースのコンパイルと実行には, System.Windows.Forms.dll,System.dll, System.Drawing.dllへの参照設定が必要

GUIプログラミングの基本=イベント イベントとは イベントの例 ウィンドウやウィンドウ内のパーツ(ボタン・スクロールバーなど)に発生する 様々な出来事・きっかけ MouseEnterイベント発生 MouseLeaveイベント発生 イベントの例 マウスがウィンドウ上に入った マウスがウィンドウ上から出た マウスのボタンが押された キーボードのキーが押された ウィンドウが閉じられた ウィンドウが開かれた ウィンドウのサイズが変わった 他のウィンドウの下になっていたウィンドウ全体が前に出た 他のウィンドウに隠れていた一部分が前に出た MouseDownイベント発生 このタイプのイベントが発生したらプログラムはウィンドウ内の文字や図形を描かなければならない → Paint イベント発生 ウィンドウが隠れて出たり,サイズが変わったりするたびにウィンドウ内を描画するのか? 答え: YES! それがウィンドウプログラミングの基本

OnPaint()メソッドのタイミング 問題: メソッドOnPaint()はいったいいつ呼び出されて実行されているのか?? 答え: namespace Matsushima {   using System.Windows.Forms;   using System.Drawing;   class MyWindow : Form   {     public MyWindow() {}     protected override void OnPaint(PaintEventArgs pea)     {       Graphics grfx = pea.Graphics;       grfx.DrawString("ウィンドウ内に文字を書いたぞ!",           Font, Brushes.Black, 50, 35);     }   }   class koushu8c     public static void Main()       MyWindow mw = new MyWindow();       mw.Text = "これは松島のウィンドウだ";       mw.Height = 100;       mw.Width = 500;       Application.Run(mw); } 問題: メソッドOnPaint()はいったいいつ呼び出されて実行されているのか?? 答え: メソッドOnPaint()はPaintイベントが発生するたびに毎回呼び出されている 注)このソースのコンパイルと実行には, System.Windows.Forms.dll,Sysutem.dll, System.Drawing.dllへの参照設定が必要

GUIプログラムの実行方式=イベント駆動(イベントドリブン) イベント発生のタイミングも順序も予測不能 非GUIプログラム GUIプログラム class koushu8 {   public static void Main()   {     int x,i ;     x = x + 10;     Console.WriteLine(・・・);     for(i = 0; i < 10; i++)     {       ・・・・     }     if (x > 20)     ・・・・   } } class koushu8 {   public static void Main()   {     MyWindow mw = new MyWindow();     mw.Text = "題名";     mw.Height = 100;     mw.Width = 500;     Application.Run(mw);   } } 予測可能な一定の順序で処理が進む イベントA発生 イベントA 処理 イベントループ プログラム終了 イベントB発生 イベントB 処理 ウィンドウクローズイベント発生 イベントC発生 イベントC 処理 イベントを処理するルーチン → イベントハンドラ GUIではプログラマの仕事のほとんどはイベントハンドラの作成!

VisualStudio.NETにおけるGUIプログラム作成の流れ フォームとコントロールは既存のクラスライブラリ VisualStudio.NETのフォームデザイナで作成可能 (1) 配置デザイン フォームを作成し,ボタン,スクロールバーなどの GUI部品(コントロール)を配置 デザインに対応したソースコードをフォームデザイナが自動作成 (2) プロパティ設定 ウィンドウの色やタイトル,ボタンの性質などの設定 (3) イベントハンドラ作成 マウスダウンやボタンクリックなどのイベントハンドラの プログラムを作成してゆく 今まで授業で使用していたのは コードエディタだった! VisualStudio.NETのコードエディタで作成