JavaとUMLで学ぶオブジェクト指向の考え方
第1章
オブジェクト指向のコンセプト
2003年6月2日(月)
荒木研究室
山之上 陽二
1
この章のポイント
オブジェクトとは何か
クラスとは何か
オブジェクトとクラスの違い
基本的なオブジェクト指向概念
2
最近のソフトウェア開発
現在も非オブジェクト指向で開発された
多くのレガシーシステムが動作している
新規開発では、オブジェクト指向技術を
採用→オブジェクト指向型開発の増加
Web
3
手続き型プログラミングと
オブジェクト指向プログラミング(1)
オブジェクト指向の主な特徴
コードの再利用性(第8章で詳説)
オブジェクトとは何か
データと動作の両方を含む実態
4
手続き型プログラミングと
オブジェクト指向プログラミング(2)
手続き型プログラミングの問題
データが手続きから分離され、グローバル
(広域)になる
データにアクセスするコードを制限できない
関数1
関数2
グローバル
データ
関数3
関数4
5
手続き型プログラミングと
オブジェクト指向プログラミング(3)
オブジェクト指向プログラミング
データと動作を結合して一つのエンティティ
(entity:実体)にする→カプセル化
例
データ型とそれらを操作するメソッドを保持
オブジェクトのメンバへのアクセスを制限
myInt1, myInt2
setmyInt()
getmyInt()
Math
sum()
6
手続き型プログラミングと
オブジェクト指向プログラミング(4)
myObject
データ
メソッド
メソッド
メソッド
メッセージ
メソッド
メソッド
メソッド
データ
Math
オブジェクト間の対話
7
オブジェクト指向プログラミングと
手続き型プログラミングの相異点
手続き型
プログラミング
データとデータ操作が
分離されている
データ(パケット)
クライアント
サーバ
vs.
オブジェクト指向
プログラミング
データとデータ操作が
一緒にオブジェクトに
含まれている
オブジェクト
クライアント
サーバ
例:ネットワーク経由で送信されるデータ/オブジェクト
8
オブジェクトとは何か?(1)
オブジェクト
オブジェクト指向プログラムの構成単位
データと振る舞いで構成
例
会社の従業員を表すオブジェクトを含む
企業システム
9
オブジェクトとは何か?(2)
オブジェクトのデータ
属性(attribute)
オブジェクトの状態(state:ステート)を表す
例
従業員(Employee)は社会保障番号、生年月日、
性別などの属性を持っている
社会保障番号(socialSecurityNumber)
性別(gender)
Employee
生年月日(dateOfBirth)
10
オブジェクトとは何か?(3)
オブジェクトの振る舞い
メソッド
手続き型言語の関数に相当
メソッドを呼び出すには、メッセージ
(message)を送信する
単にメソッドのインターフェイスだけを示してお
り、メソッドの実装は示していない
11
オブジェクトとは何か?(4)
オブジェクトの振る舞い
例
getSocialSecurityNumber()
getGender()
Employee
getDateOfBirth()
メッセージ:
getSocialSecurityNumber()
calculatePay()
Payroll
12
オブジェクトとは何か?(4)
オブジェクトの振る舞い
例
getSocialSecurityNumber()
getGender()
Employee
getDateOfBirth()
要求された情報:
SocialSecurityNumber
calculatePay()
Payroll
13
オブジェクトとは何か?(5)
クラス図
Employee
-socialSecurityNumber:String
-gender:boolean
-dateOfBirth:Date
Payroll
+calculatePay:double
-pay:double
+getSocialSecurityNumber:String
+getGender:boolean
+getDateOfBirth:Date
+getSocialSecurityNumber:void
+getGender:void
+getDateOfBirth:void
14
オブジェクトとは何か?(6)
オブジェクトのインスタンス化
クラス(テンプレート)からオブジェクトを生成
例
参照:John
参照:Mary
プログラム空間
プログラム空間
//データ―属性
-socialSecurityNumber;
-gender;
-dateOfBirth;
//データ―属性
-socialSecurityNumber;
-gender;
-dateOfBirth;
//動作―メソッド
+getSocialSecurityNumber(){}
+getGender(){}
+getDateOfBirth(){}
+getSocialSecurityNumber(){}
+getGender(){}
+getDateOfBirth(){}
//動作―メソッド
+getSocialSecurityNumber(){}
+getGender(){}
+getDateOfBirth(){}
+getSocialSecurityNumber(){}
+getGender(){}
+getDateOfBirth(){}
15
クラスとは何か?(1)
クラスはオブジェクトのテンプレートである
概念
クッキーの抜き型
クラステンプレート:
クッキーの抜き型
クッキーの生地
オブジェクト:
クッキー
16
クラスとは何か?(2)
クラスは高水準のデータ型
定義済みのクラスを使用して、オブジェクトを生成
Int x;
Float y;
MyClass myObject;
クラスの定義
属性
メソッド
メッセージ
17
クラスとは何か?(3)
クラスの定義
属性
メソッド
メッセージ
Public class Person{
Public class Payroll{
private String name, address;
String name;
public String getName(){
return name;
}
public void setName(String n){
name = n;
}
Person person = new Person();
public String getAddress(){
return address;
}
public void setAddress(String adr){
address = adr;
}
String = person.setName(“Joe”);
…
String = person.getName();
}
}
18
UMLによるクラスのモデル化
Person
-name:String
-address:String
属性
+getName:String
+setName:void
+getAddress:String
+setAddress:void
メソッド
Personのクラス図
19
カプセル化(1)
カプセル化
インターフェイスだけを公開
詳細な実装は隠蔽
20
カプセル化(2)
実世界のインターフェイス/実装パラダイム
例:発電所
パソコン
インターフェイス
発電所
21
カプセル化(3)
Javaのインターフェイス
例:整数の2乗を計算するクラス
Square
public class Square{
//プライベート属性
private int squareValue;
-squareValue:int
//パブリックインターフェイス
public int getSquare(int value){
+getSquare:int
-calculateSquare:int
squareValue = calculateSquare(value);
return squareValue;
}
//プライベート実装
private int calculateSquare(int value){
return value*value;
}
}
22
継承(1)
継承(inheritance)
クラスの共通点を抽出して再利用
スーパークラスとサブクラス
抽象化
is-a関係
23
継承(2)
例
Mammal
-eyeColor:int
スーパークラス(親クラス)
+getEyeColor:int
抽象化
Dog
スーパークラス(親クラス)
サブクラス(子クラス)
Cat
-barkFrequency:int
-meowFrequency:int
+bark:void
+meow:void
サブクラス(子クラス)
抽象化
GermanShepherd
Poodle
サブクラス(子クラス)
サブクラス(子クラス)
+isGerman:void
+isFrench:void
24
継承(3)
is-a関係
Shape
draw()
draw()
draw()
Circle
Star
Square
25
ポリモーフィズム(1)
ポリモーフィズム
類似したオブジェクトが同じメッセージに対して
異なる方法で応答
継承と密接に関連
オーバーライド
親のメソッドの実装を子のメソッド実装で置き換え
る
26
ポリモーフィズム(2)
例
public class Circle extends Shape{
double radius;
public abstract class Shape{
public Circle(double r){
private double area;
radius = r;
public abstract double getArea();
}
}
public double getArea(){
area = 3.14*(radius*radius);
return(area);
}
};
27
ポリモーフィズム(3)
例
public class Rectangle extends Shape{
double length;
double width;
Shape
#area:double
public Rectangle(double l,double w){
length = l;
width = w;
+getArea:double
Circle
Radius:double
+Circle:
+getArea:double
}
Rectangle
public double getArea(){
length:double
Width:double
+Rectangle:
+getArea:double
}
};
area = length*width;
return(area);
28
コンポジション
コンポジション
オブジェクトがほかのオブジェクトを含む
has-a関係
例
テレビ
チューナー
ブラウン管
29
まとめ
カプセル化
継承
ポリモーフィズム
コンポジション
30
© Copyright 2026 ExpyDoc