OOP Basic

32
Object Oriented Programming 20150111 Yeti

Transcript of OOP Basic

Object Oriented Programming

20150111 Yeti

軟體開發是⾨門藝術

軟體開發是⾨門藝術

簡單

http://static2.ithome.com.tw/uploads/image-upload/53188aecc6cb4.jpg

• ⼤大家都會說話、看書(⾃自然語⾔言)

• 國⼩小⽣生會寫網⾴頁、Flash(程式語⾔言)

• 國中⽣生會寫外掛(Script語⾔言)

• 全世界都講中國話

WARNING

問題WARNING

軟體開發的問題

• 重⽤用性

• 維護性

• 品質

• 擴充性

OOP

• OOP(Object Oriented Programming)

• ⾯面向对象程序设计

• 物件導向程式設計

• 始祖:Simula —> Smalltalk(發揚光⼤大)

特性

• 封裝(Encapsulation)

• 繼承(Inheritance)

• 多型(Polymorphism)

startup()shutdown()getOS()setOS()

- cpu- ram- disk- os

Laptop

InstallWindows()

WindowsInstallable

getOS()setOS()recovery()

Mac

getOS()setOS()fastBoot()openOpticalDrive()closeOpticalDrive()

- opticalDriveASUS

InstallOSX()

OSXInstallable

Encapsulation• 隱藏某個步驟,透過定義的⽅方式進⾏行存取

startup()shutdown()getOS()setOS()

- cpu- ram- disk- os

Laptop

InstallWindows()

WindowsInstallable

getOS()setOS()recovery()

Mac

getOS()setOS()fastBoot()openOpticalDrive()closeOpticalDrive()

- opticalDriveASUS

InstallOSX()

OSXInstallable

startup()shutdown()getOS()setOS()

- cpu- ram- disk- os

Laptop

InstallWindows()

WindowsInstallable

getOS()setOS()recovery()

Mac

getOS()setOS()fastBoot()openOpticalDrive()closeOpticalDrive()

- opticalDriveASUS

InstallOSX()

OSXInstallable

Inheritance• 擴充既有物件

startup()shutdown()getOS()setOS()

- cpu- ram- disk- os

Laptop

InstallWindows()

WindowsInstallable

getOS()setOS()recovery()

Mac

getOS()setOS()fastBoot()openOpticalDrive()closeOpticalDrive()

- opticalDriveASUS

InstallOSX()

OSXInstallable

Polymorphism• 根據不同類型做相對應的動作

startup()shutdown()getOS()setOS()

- cpu- ram- disk- os

Laptop

InstallWindows()

WindowsInstallable

getOS()setOS()recovery()

Mac

getOS()setOS()fastBoot()openOpticalDrive()closeOpticalDrive()

- opticalDriveASUS

InstallOSX()

OSXInstallable

⼩小蛋糕

• 吉娃娃是狗,⽐比特是狗

• 吉娃娃體型⼩小、⽐比特體型⼤大

• 吉娃娃神經質、⽐比特兇猛

• 吉娃娃跟⽐比特都會跑

• Rick是⼈人,⼈人跟狗同屬動物

• ⼈人會跑

• 狗有四隻腳,⼈人有兩隻腳

()

��

( ()()

1234

)

( ()

���

( ()

12

����

• 繼承很好⽤用,看起來很強⼤大

• C++⽀支援多重繼承

• Java不⽀支援多重繼承,以Interface替代

• 繼承很好⽤用,看起來很強⼤大

• C++⽀支援多重繼承

• Java不⽀支援多重繼承,以Interface替代Why?

()

( ()()

1234)

( ()

��

( ()

12

����

x()

���

()

( ()()

1234

( ()

��

( ()

12

����

)

介⾯面• 定義於不同物件中、具相同特性的功能

startup()shutdown()getOS()setOS()

- cpu- ram- disk- os

Laptop

InstallWindows()

WindowsInstallable

getOS()setOS()recovery()

Mac

getOS()setOS()fastBoot()openOpticalDrive()closeOpticalDrive()

- opticalDriveASUS

InstallOSX()

OSXInstallable

()

( ()()

1234

( ()

��

( ()

12

����

)

Class & Object?

Class & Object?

• Class 是定義

• Object 是根據Class定義⽽而產⽣生出來的實體

modifier• public

• protected

• Visibility: C++(Inherit), Java(Inherit||Package)

• private

• static

• like global. share in same Class. (EX:Definition)

Design Pattern?

Next time…(maybe)