復習ー I (General Review I) クラスとオブジェクトの概念 Concepts of class and object クラスの宣言とオブジェクトの生成 Definition of a class and creation of an object コンストラクタとメソッドのオーバーロー.

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

1 C++ における OOP を用いた 書き方講座 H 山崎貴英. 2 今回の内容 OOP とは? C++ の超基礎 注釈 書いてあるコードはすべて一部抜粋。 コピペだと動かないよ!
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) 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 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
C++ 基礎. 目次 C++ とは? C++ におけるオブジェクト指向 課題 C++ とは? Cには足りなかったものが付与されて出来た物 具体的には、 情報の隠蔽(カプセル化) 共通の名前付け(関数のオーバーロード) 再利用の仕組み クラスの導入 など オブジェクト指向 C++ では大規模なプログラミングの.
AIプログラミング Java とオブジェクト指向プログラミングの基 礎 認知システム論 情報工学コース コンピュータサイエンスコース 生体情報コース.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Applet 岡部 祐典 鈴木 敬幸.
~手続き指向からオブジェクト指向へ(Ⅰ)~
第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明.
プログラミング基礎I(再) 山元進.
第5回 iPhoneアプリ開発勉強会 Objective-C 「継承とクラス」
復習ーII (General Review II)
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
アルゴリズムとプログラミング (Algorithms and Programming)
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
Bridge Pattern
オブジェクト指向入門.
計算機プログラミングI 第8回 2002年12月5日(木) メソッドとクラス (教科書6章) クイズ インスタンスメソッド インスタンス変数
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
~手続き指向からオブジェクト指向へ[Ⅱ]~
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
変数のスコープ クラス クラス変数 すべてのメソッドの外側でstaticで定義
ソフトウェア工学 知能情報学部 新田直也.
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
第7回独習Javaゼミ セクション 1~4 発表者 直江 宗紀.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
第11週:super/subクラス、継承性、メソッド再定義
Nakano School of Business 経営情報ビジネス科 【 Java概論(Test5)】
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS.
Java8について 2014/03/07.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
もっと詳しくArrayクラスについて調べるには → キーワード検索
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
計算機プログラミングI 第8回 素数を見つけるアルゴリズム 継承とインスタンスメソッド クラスの設計 オブジェクトに機能を加える
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
サブゼミ第7回 実装編① オブジェクト型とキャスト.
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
JAVA入門⑥ クラスとインスタンス.
18. Case Study : Imperative Objects
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
オブジェクト・プログラミング 第10回 オブジェクト指向設計のキモ.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

復習ー I (General Review I) クラスとオブジェクトの概念 Concepts of class and object クラスの宣言とオブジェクトの生成 Definition of a class and creation of an object コンストラクタとメソッドのオーバーロー Constructor and method overloading インスタンスとクラスの変数とメソッド Instance and static/class variable & method スーパークラスとサブクラス Super-class and sub-class 継承とメソッドオーバーライド Inheritance and method overriding アクセス制御修飾子 Access control: default, public, private, protect 抽象クラスとインタフェース abstract class and interface クラスとオブジェクトの概念 Concepts of class and object クラスの宣言とオブジェクトの生成 Definition of a class and creation of an object コンストラクタとメソッドのオーバーロー Constructor and method overloading インスタンスとクラスの変数とメソッド Instance and static/class variable & method スーパークラスとサブクラス Super-class and sub-class 継承とメソッドオーバーライド Inheritance and method overriding アクセス制御修飾子 Access control: default, public, private, protect 抽象クラスとインタフェース abstract class and interface

クラス( class )とオブジェクト (object)/ インスタンス ( instance ) インスタンス(オブジェクト)は具体的な特定のもの 同じクラスのインスタンス(オブジェクト)は共通の 性質を持つ class object instance StringProfessor Hello Java Ohmori, Kunii Rectangle

class クラス名 { 変数 (variable) の宣言 メソッド (method) の宣言 } class Rectangle {// 長方形 int width;// 変数 width (幅)の宣言 int height;// 変数 height (高さ)の宣言 void setSize( int w, int h) {// setSize メソッドの宣言 width = w;// width (幅)の設定 height = h; // height (高さ)の設定 } int getArea() {// getArea メソッドの宣言 return width * height;// 面積を計算して返す } 値を返さ ない int 型の値 を返す 引数 arguments クラス宣言 – Definition of a class

インスタンス ( オブジェクト ) の作り方 (create objects) Rectangle r = new Rectangle(); r.width = 123; // r.setSize(123, 45); でもよい r.height = 45; r r.width r.height void setSize(int w, int h) { this.width = w; this.height = h; } this はインスタンス自 身 r.setSize(123, 45) の呼 び出しの中では this と r は同じ メソッドの呼 出し 実引数 0 0 object reference new 引数なし

コンストラク (constructor) – create objects class Rectangle {.... Rectangle( ) { setSize(10, 20); } Rectangle(int w, int h) { width = w;// setSize(w, h); でも height = h; }.... } Rectangle r1 = new Rectangle(); Rectangle r2 = new Rectangle(12, 56); r1 r2 メソッドとの違い ・コンストラクタの名前 はクラス名と同じ ・戻り値の型がない コンストラクタの多重定義 ( overload ) 名前は同じで引数の 型や個数が違う インスタンスを生 成し 変数の初期化を行 う

クラス変数( class variable / static variable ) class Rectangle {.... static int counter = 0; int number; Rectangle( ) { width=10; height=20; counter++; number = counter; } Rectangle r1 = new Rectangle(); Rectangle r2 = new Rectangle(); Rectangle r3 = new Rectangle(); r3 r2.number r2 r2.number r1 r1.number 1 Rectangle Rectangle.counter 3 インスタンス変数はインスタンスご と クラス変数はクラスに1つ、 can’t be accessed via object クラス変 数 インスタン ス 変数 r1.counter (x) r2.counter (x) r3.counter (x)

クラスメソッド ( class/static method ) class Rectangle {.... static int counter = 0; int number;.... static int getCounter( ) { return counter;} int getArea() { return width*height; }.... } Rectangle r1 = new Rectangle(); int i = Rectangle.getCounter(); int j = r1.getArea(); r1 number 1 Rectangle counter 3 インスタンスメソッドはインスタンスごと クラスメソッドはクラスに1つ(インスタンス変数に直接アクセ スは不可) クラス メソッド クラス変 数 getCounter getArea インスタン ス メソッド r1.counter (X) r1.getCounter() (x) Rectangle.counter Rectangle.getCounter()

class Rectangle { int width; int height; …… int getArea( ) { return width * height; } static int getArea(Rectangle r ) { return r.width * r.height; } } Rectangle r1 = new Rectangle(); int a1 = r1.getArea(); インスタン ス メソッド Rectangle r2 = new Rectangle(); int a2 = Rectangle.getArea(r2); クラス メソッド インスタンスメソッドとクラスメソッド instance method and class/static method

final (定数) class Rectangle { final int INITIAL_WIDTH = 10; final int INITIAL_HEIGHT = 20; int width; int height; Rectangle( ) { width = INITIAL_WIDTH; height = INITIAL_HEIGHT; }.... } INITIAL_WIDTH = 10; //defined INITIAL_WIDTH = 100; // エラー INITIAL_WIDTH = 10; //defined INITIAL_WIDTH = 100; // エラー 一般に final と宣言されたものの内容 を変更することはできない。 ・ final 変数 (constant) final と宣言された変数 に代入はできない。 すなわち、定数である。 ・ final メソッド final と宣言されたメソッド をサブクラスで オーバーライドできない。 ・ final クラス final と宣言されたクラス のサブクラスを作ること はできない。

スーパークラスとサブクラス (super class & subclass) class Rectangle {.... } class NamedRectangle extends Rectangle {.... } Rectangle NamedRectangle スーパークラス サブクラス classA classBclassD classCclassEclassF クラス階層 class hierarchy

継承( inheritance ) class Rectangle { int width; int height; void setSize(int w, int h) {.... int getArea( ) {.... } class NamedRectangle extends Rectangle {.... } サブクラスは スーパークラス の変数やメソッド を継承する スーパークラス の持つ変数や メソッドを サブクラスも 持っている NamedRectangle nr = new NamedRectangle(); nr.setSize(123, 45); System.out.println(“width=“ + nr.width);

スーパークラスとサブクラスのコンストラクタ Constructors in super class and subclass class Rectangle { …… Rectangle( ) { setSize(10, 20); } Rectangle(int w, int h) { setSize(w, h); } } class NamedRectangle extends Rectangle { String name; NamedRectangle( ) { name = “NO NAME”; } NamedRectangle(String s, int w, int h ) { super(w, h); name = s; } コンストラクタは 継承されない スーパークラスの コンストラクタの 呼出しには super(...); を使う スーパークラスのコンストラクタの呼出 し 自動的に super(); が挿入され る 自分のクラスの コンストラクタの 呼出しには this(...); を使う

継承( is-a 関係)と合成( has-a 関係) class NamedRectangle extends Rectangle { String name; // width and height are inherited from Rectangle class NamedRectangle() { super(); name=“NO NAME”; }.….. } class NamedRectangle { String name; Rectangle r; // has a rectangle //object as a variable NamedRectangle() { r = new Rectangle(); name= “NO NAME”; }.... } (すでに存在する)クラスの利用 法 ・継承( is-a 関係) そのクラスのサブクラスを作る サブクラスはスーパークラスの 性質を継承する サブクラスはスーパークラスの 一種である ・合成( has-a 関係) そのクラスのインスタンスを持つ クラスを作る

メソッドのオーバーライド(上書き定 義) class Rectangle {.... void setSize(int w, int h) {.... }// (1) void setSize() {.... } // (2) } class NamedRectangle extends Rectangle {.... void setSize(int w, int h) {.... }// (3) } class Rectangle {.... void setSize(int w, int h) {.... }// (1) void setSize() {.... } // (2) } class NamedRectangle extends Rectangle {.... void setSize(int w, int h) {.... }// (3) } オーバーライド ( override ) 継承したメソッド を変更する (名前も引数の 型と個数も同じ) 例: (1) を (3) で オーバーロード ( overload ) 同じ名前で引数 の型や個数が 違う。例: (1) と (2) Rectangle r = new Rectangle(); NamedRectangle nr = new NamedRectangle(); r.setSize(123, 45);// (1) nr.setSize(123, 45);// (3) r = nr; // Rectangle クラスとして見る。 r.name はエラー r.setSize(123, 45); //(3) Rectangle r = new Rectangle(); NamedRectangle nr = new NamedRectangle(); r.setSize(123, 45);// (1) nr.setSize(123, 45);// (3) r = nr; // Rectangle クラスとして見る。 r.name はエラー r.setSize(123, 45); //(3) 多態性(多相性) polymorphism 多様な型の値をとる。多様な型として見る 実行時に呼ばれるメソッドはインスタンスで 決る

private (アクセス制御 /access control :情報隠 蔽) private と宣言されているものは 他のクラスから(サブクラスからも) 直接は使えない ( アクセスできない ) class Rectangle { private int width; private int height; void setSize(int w, int h) { width = w; height = h; } int getWidth() { return width; } int getHeight() { return height; } } class NamedRectangle extends Rectangle {.... int i = width; // コンパイルエラー int j = getHeight(); // ok } class Rectangle { private int width; private int height; void setSize(int w, int h) { width = w; height = h; } int getWidth() { return width; } int getHeight() { return height; } } class NamedRectangle extends Rectangle {.... int i = width; // コンパイルエラー int j = getHeight(); // ok } protected: サブクラス及び 同じ package 内のクラス 以外からはアクセスできない 宣言がなければ protected public: どのクラス からも アクセス できる アクセス メソッド (アクセ ス 用の メソッ ド)

抽象クラス ( abstract class ) abstract class Shape{ public double x, y; public Shape(double x, double y) { this.x = x; this.y = y;} abstract String getName(); } abstract class Shape{ public double x, y; public Shape(double x, double y) { this.x = x; this.y = y;} abstract String getName(); } 抽象クラス宣言 のキーワード 抽象メソッド宣 言のキーワード Public class Rectangle extends Shape{ double w, h; Rectangle(double x, double y, double w, double h { super(x,y); this.w=w;this.h=h; } String getName(){return “Rectangle”;} } Public class Rectangle extends Shape{ double w, h; Rectangle(double x, double y, double w, double h { super(x,y); this.w=w;this.h=h; } String getName(){return “Rectangle”;} } 抽象メソッドの再定義 class Test1{ public static void main(String args[]){ Shape s1 = new Rectangle(2, 5, 10, 20); sysetm.out.println(“s1=“+s1.getName()); } class Test1{ public static void main(String args[]){ Shape s1 = new Rectangle(2, 5, 10, 20); sysetm.out.println(“s1=“+s1.getName()); } メソッドの呼び出し 実行時に呼ばれるメ ソッドはインスタンス で決る Output: s1=Rectangle

インタフェース ( interface) interface Calculation{ double PI = 3.14; double area(); } interface Calculation{ double PI = 3.14; double area(); } インタフェーす 宣言のキーワー ド 抽象メソッド宣 言のキーワード を省略する 抽象メソッ ドの再定義 出力: This object r1 is a Rectangle, area = インタフェー スの使い方 サブクラス のコンスト ラクタ メソッド の呼び出 し final ( 定数 ) キーワード を省略する public abstract class Shape{ public double x, y; public Shape(double x, double y) { this.x = x; this.y = y;} public abstract String getName(); } public class Rectangle extends Shape implements Calculation{ public double w, h; public Rectangle(double x, double y, double w, double h){ super(x, y); this.w = w; this.h = h; } public String getName(){ return “ Rectangle ” ; } public double area(){ return w*h; } } public class Test2{ public static void main(String args[]){ Rectangle r1 = new Rectangle(100, 100, 10, 20); Shape s1 = r1; Calculation c1 = r1; System.out.println( “ This object r1 is a ” + s1.getName() + “, area = ” + c1.area()); } インタ フェースの 実装

課題 (Exercise) 1. 次のクラスの宣言を完成しなさい。 2. 次のサブクラスの宣言を完成しなさい。 class Rectangle{ private int width; private int height; private int number; static int counter=0; Rectangle(){ ??? } Rectangle(int w, int h){ ??? } void setSize(int w, int h){ ??? } int getWidth() { ??? } int getHeight() {??? } int getArea() { ??? } public String toString(){ ??? // number,width, height, area } } class Rectangle{ private int width; private int height; private int number; static int counter=0; Rectangle(){ ??? } Rectangle(int w, int h){ ??? } void setSize(int w, int h){ ??? } int getWidth() { ??? } int getHeight() {??? } int getArea() { ??? } public String toString(){ ??? // number,width, height, area } } class NamedRectangle extends Rectangle{ String name; NamedRectangle(){ ??? // no name } NamedRectangle(String s, int w, int h){ ??? } void scaleSize(int s){ ??? // 拡大又は縮小 s 倍 } public String toString(){ ??? //name, number, width, height, area を出力 } class NamedRectangle extends Rectangle{ String name; NamedRectangle(){ ??? // no name } NamedRectangle(String s, int w, int h){ ??? } void scaleSize(int s){ ??? // 拡大又は縮小 s 倍 } public String toString(){ ??? //name, number, width, height, area を出力 } public class RectangleCreationApplication { ??? // main メソッド ??? // Rectangle() コンストラクタ 使って、 Rectangle のオブジェクトを生成します ??? // Rectangle(int w, int h) コンストラクタ 使って、 Rectangle のオブジェクトを生成します ??? // NameRectangle() コンストラクタ 使って、 NamedRectangle のオブジェクトを生成します ??? // NamedRectangle オブジェクトを二倍で拡大します ??? // NamedRectangle(String s, int w, int h) コンストラクタ 使って、 Rectangle のオブジェクトを生成し ます ??? // 生成したオブジェクトを出力しなさい ??? // static 変数 counter を使って、生成したオブジェクトの数を出力しなさい } public class RectangleCreationApplication { ??? // main メソッド ??? // Rectangle() コンストラクタ 使って、 Rectangle のオブジェクトを生成します ??? // Rectangle(int w, int h) コンストラクタ 使って、 Rectangle のオブジェクトを生成します ??? // NameRectangle() コンストラクタ 使って、 NamedRectangle のオブジェクトを生成します ??? // NamedRectangle オブジェクトを二倍で拡大します ??? // NamedRectangle(String s, int w, int h) コンストラクタ 使って、 Rectangle のオブジェクトを生成し ます ??? // 生成したオブジェクトを出力しなさい ??? // static 変数 counter を使って、生成したオブジェクトの数を出力しなさい } 3. Rectangle と NamedRectangle のいくつかのオブジェクトの生成と生成したオブジェ クトの出力の Java application プログラムを作成しなさい。