第八章:類別與物件- 封裝

Download Report

Transcript 第八章:類別與物件- 封裝

第八章 :類別與物件 - 封裝
8-1 物件導向程式語言



封裝 - 將資料和處理資料的程序與函數組含起來建
立物件。
*類別(Class)=>替程式語言定義新的資料型態。
繼承 - 物件再利用,當定義好的一個類別後,其他
類別可以繼承這個類別的資料和方法,並且
新增或取代繼承物件的資料和方法。
多形 -類別若需要處理不同的資料型態,並不需要
為各種不同的資料型態建立不同的類別,只
需為各種資料型態,建立名稱相同但程式碼
不同的成員函式即可。
8-2 Java的類別與物件 - 封裝


類別:成員資料、成員方法。
class 類別名稱{
*Class Customer{
資料型態 成員資料;
public String name;
……
public int age;
存取敘述修飾子 傳回
public void printLabel()
值型態 成員方法(參
{
數)
System.out.println(“姓名:” +
{
name);
程式敘述 ;
System out.println(“年齡:” +
}
age);
………
}
}
}
8-2 Java的類別與物件 - 封裝


宣告物件變數
Customer joe,jane,current; /*物件變數*/
建立物件副本
Joe = new Customer() ;
joe
Customer物件
8-2 Java的類別與物件 - 封裝

存取副本變數與方法
物件變數名稱.副本變數
物件變數名稱.副本方法
joe.name = “陳會安” ;
joe.address = “台北縣” ;
joe.age = 35 ;
joe.printLabel();
8-2 Java的類別與物件 - 封裝

Ch8_2_1
*current=joe;
joe : Customer
name:String = 陳會安
address:String = 台北縣
age:int = 35
joe
jane
current
jane : Customer
empty
物件變數
null
name:String = 江小魚
address:String = 台北市
age:int = 30
8-2 Java的類別與物件 - 封裝
成員資料的存取
◎ private修飾子: 成員資料或成員方法只
能在類別本身呼叫或存取。【可保護本
身的資料】
◎ public修飾子: 成員資料或成員方法可
讓其他類別程式存取或呼叫。

8-2 Java的類別與物件 - 封裝

Ch8_2_2

Ch8_2_3
Customer
Customer
-name:String
-address:String
-age:int
+printLabel()
+setName(String)
+setAddress(String)
+setAge(int):boolean
+valiAge(int):boolean
-name:String
-address:String
-age:int
+printLabel()
+setName(String)
+setAddress(String)
+setAge(int):boolean
+getName():String
+getAddress():String
+getAge():int
-valiAge(int):boolean
8-3 類別的建構子
建構子:在建立物件同時能夠初始成員變數。
 類別建構子的特點:
◎建構子與類別同名:
例如:類別Customer的建構子方法是
Customer( ) 。
◎建構子沒有回傳值。
◎建構子支援過載:
具有多個相同名稱的建構子,只是擁有不同
參數型態和個數。

8-3 類別的建構子

使用this參考物件本身
Ch8_3_2
public Customer(String name, String address, int age)
{
this.name = name;
// 設定姓名
this.address = address; // 設定地址
if ( validAge(age) )
this.age = age;
// 設定年齡
else
this.age = 20;
// 年齡初值
}
8-4 類別關係

類別的結合關係
Ch8_4_1
Salesman
-salesNO:String
-name:String
Order
itsSalesman
-orderNO:String
-status:boolean
itOrder
+setOrder(Order )
+printSalesman( )
+setSalesman(Salesman)
+getNO( ) :String
+printOrder( )
8-4 類別關係

可導覽的結合關係(擁有方向性的結合
關係)
Ch8_4_2
Customer
Order
-name:String
-address:String
-orderNO:String
-status:boolean
+setOrder(Order)
+printCustomer( )
itsOrder
+getNO( ) :String
+printOrder( )
8-4 類別關係

一對多的類別關係
Ch8_4_3
Order
-orderNO:Stirng
-status:boolean
-pos:int
+addItem(OrderItem)
+getNO( ) :String
+printOrder( )
OrderItem
1
0..5
-itemNO:String
-quantity:int
+getNO( ) :String
+getQuantity( ) :int
8-4 類別關係


一對多的類別關係
Class order
{
………….
Ch8_4_3
private orderItem[ ] itsItem = new orderItem[5] ;
public void addItem( orderItem item ) { }
………….
}
Class orderItem {…………}
8-4 類別關係

類別的相依關係
Client
Ch8_4_4
Server
+x:int = 10
+getX(Server) :int
8-5 結合類別

類別的相依關係
Ch8_5
Order
-orderNO:Stirng
-status:boolean
-pos:int
+addItem(OrderItem)
+getNO( ) :String
+printOrder( )
SalesItem
0…5
0...5
OrderItem
-quantity:int
+getQuantity( ) :int
-itemNO:String
-itemName:String
-pos:int
+addItem(OrderItem)
+getNO( ) :String
+getName( ) :String
+printSalesItem( )
8-5 結合類別

類別的相依關係
Class Order
{
……
private OrderItem[ ] itsItem = new orderItem[5];
public void addItem(OrderItem item) { }
……
}
Class SalesItem
{
……
private OrderItem[ ] itsItem = new orderItem[5];
public void addItem(OrderItem item) { }
……
}
Ch8_5
8-5 結合類別

類別的相依關係
Ch8_5
Class orderItem
{
……
public Order myOrder ;
public SalesItem myItem ;
public OrderItem( int quantity,Order order,SalesItem item)
{
……
myOrder = order ;
myItem = item ;
order.addItem( this ) ;
item.addItem( this ) ;
}
…….
}
8-6 在物件使用類別變數與方法

Ch8_6
Student
Class Student
{
public static int teacherNo = 100 ;
pribate static int count ;
…….
…….
public static int getStudentCount( )
{
retrun count ;
}
…….
}
+teacherNO:int = 100
-count:int
-id:int
-test1:double
-test2:double
-test3:double
-getStudentCount( ) :int
-getAverage( ) :double
+printStude( )
8-6 在物件使用類別變數與方法
Student
+teacherNO:int = 100
-count:int
-id:int
-test1:double
-test2:double
-test3:double
std1:Student
-id:int = 1
-test1:double = 68.0
-test2:double = 78.8
-test3:double = 53.0
-getStudentCount( ) :int
-getAverage( ) :double
+printStude( )
std2:Student
-id:int = 2
-test1:double = 77.0
-test2:double = 82.0
-test3:double = 39.0
第八章 習題12
請建立Java程式的可導覽結合關係,在名片資料的Cards類別擁有指向
PhoneList類別的成員物件,Cards類別擁有:
◎成員變數:name、age、phone和email儲存姓名、年齡、電話和電子郵件
資料,phone變數是參考另一個副本物件。
◎成員方法:printCard( )方法顯示名片資料。
PhoneList類別擁有成員變數:homephone、officehone和cellphone儲存住家、
公司和手機電話,最後繪出UML類別關係圖。
Cards
-name:String
-age:int
-phone:PhoneList
-email:String
+printCard( )
PhoneList
-homephone:String
itsPhoneList -officephone:String
-cellphone:String
+printPhoneList( )
第八章
習題13
Text8_1
一個公司擁有多位員工是一對多類別關係,請依照下列
UML類別塗寫出Java程式,然後顯示公司資料和員工清單,
如下圖所示:
Employee
Company
+name:String
+address:Sting
+addEmployee(Employee)
+printCompany( )
1
0..5
itsEmployee
-no:String
-name:String
-salary:double
+getNo() :String
+getName() :String
+getSalary() :double
報告完畢
請多指教