您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 物件导向程式设计(object-oriented
TheBasicsofObject-OrientedProgrammingEricJui-LinLu,Ph.D.DepartmentofManagementInformationSystemsNationalChungHsingUniversity2Object-OrientedProgramming物件導向程式設計(object-orientedprogramming)是一種以物件為核心的程式設計方式,這一類的程式會利用一個或者一個以上的物件來完成工作。這一類程式設計的一項重點就是找出所需要的物件當需要一個以上的物件來完成一個工作時,這些物件之間會互相呼叫(也稱之為傳送訊息,sendmessage)來互動Object(orentity,instance)也就是物件、實體。例如:汽車、人、表單等等3Objects每一個物件都擁有特性(一般稱之為屬性attribute)以及行為(一般稱之為method或者function)例如:描述汽車的方式有廠牌、排氣量、顏色等,汽車的行為有加速、煞車等例如:描述學生的方式有姓名、學號、系別、年級、連絡住址、身高、體重等,學生的行為有選課、更改住址等每一個物件的特性值說明該物件的狀態我的汽車是Honda,1600cc,灰色的轎車資管系周潔輪今年是二年級,他的學號是11223344。4Classes從一個實體中萃取出我們有興趣的特性以及行為的過程,我們稱之為抽象化(abstraction)以學生為例,如果我們今天要完成的系統是保健室的登錄系統,那麼我們需要從學生萃取出來的特色應該有姓名、學號、身高、和體重。可是如果要完成的系統是學生選課系統,那麼我們不會對身高和體重有興趣,自然不需要把這些特色定義出來。我們需要對每一個物件都進行定義嗎?以一個有一萬多人的學校,要為每一個學生物件都進行定義的話,這是非常耗時的。其實,以一個特定系統而言(例如之前所說的選課系統),每一個學生物件的特色以及行為都是相同的。如果為每一個學生物件都定義的話,幾乎都是重複的。因此,同一類的物件的特色以及行為的定義就統一的定義在類別(class)裡。5Object-OrientedModel要使用物件來完成工作以前,類別必須先被定義出來。在寫物件導向程式的時候,一般來說,會建議使用現成的類別。在Java的套件中,已經擁有數千個類別的定義。如果現成的類別不存在,我們就自己定義類別。因此,Java的每一個程式都是一個類別在Java的程式中,我們最少需要一個類別,這個類別控制整個程式的流程,例如先取得使用者的輸入,利用物件完成工作,最後把結果呈現出來。這個類別也因此稱之為控制類別(controlclass)。6HelloWorld//class是表明類別的保留字classHelloWorld{publicstaticvoidmain(String[]args){//System是JDK提供的類別//System.out是代表一個物件,也就是標準輸出System.out.println(“HelloWorld”);}}7UseofDateClass//將系統時間顯示出來//利用一個現成的物件System.out,以及產生一個新的物件d//利用物件之間的互動,將工作完成classDisplayDate{publicstaticvoidmain(String[]args){java.util.Dated=newjava.util.Date();System.out.println(d.toString());}}8AnExampleAworkerispaidatthehourlyrateof$8perhourforthefirst35hoursworked.Overtimeispaidat1.5timesthehourlyrateforthenext25hoursworkedandpaidat2timesthehourlyrateforadditionalhoursworked.Writeaprogramtoinputthenumberofhoursworked;thencalculateandoutputthetotalamountpaid.物件是什麼?描述這個物件的屬性是什麼?這個物件的行為是什麼?9Object-OrientedModel開始定義這個物件的類別。這個類別,我們一般稱之為模式類別(modelclass)。產生一個控制類別,在這個控制類別中,我們取得使用者輸入的資料,然後產生一個物件(也就是產生一個之前定義的模式類別的一個instance),並設定這個物件的值之後,要求物件計算出薪資總額。因為要用到Input以及Output,我們也可以使用JDK提供的IO類別,這一類的類別也稱之為ViewClass.10Object-OrientedModelJDK提供的IOclasses有JOptionPaneStrings=JOptionPane.showInputDialog(“EnterHours”);JOptionPane.showMessageDialog(null,“HelloWorld”);I/OStreams(java.io.*)BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));Strings=br.readLine();java.util.Scanner(JDK1.5orabove)Scannerreader=newScanner(System.in);inth=reader.nextInt();這種將類別分成三個主要種類的模式,我們稱之為MVC(Model,View,andControl)Model.11Instancesvs.ClassesConstructor(建構元)hourlyrate,1.5,and2怎麼辦?instancedataclassdata(加上static)其差別在於記憶體的考量instancedata必須物件存在的時候,他才存在;而classdata是class存在的時候,他就存在了。類似的情形也存在於methodinstancemethodclassmethod(加上static)12Encapsulation物件導向模式的第一個特性--Encapsulation(封裝)為什麼要encapsulation?Java如何完成encapsulation?publicprivateprotectednone看一下UML的Class以及Object的圖13AnExercise範例Acompanyhasfoursalespeoplewhosellfivedifferentproducts.Onceaday,eachsalespersonpassesinaslipforeachdifferenttypeofproductsold.Eachslipcontainsthesalespersonnumber(1to4),theproductnumber(1to5),andthetotaldollarvalueofthatproductsoldthatday.Thus,eachsalespersonpassesinbetween0and5salesslipsperday.PleasewriteanOOprogram(notapplet)thatwillreadallinformationandsummarizethetotalsalesbysalesperson.14Discussions討論的主題有哪些Modelclasses?陣列vs.Vector為什麼Vector的元素可以包含我們建立的classes?想想看一個物件有時候它是某個資料型態,在另一個時候它又是另一個資料型態。這種特色稱之為多型(Polymorphism),而要了解多型,就必須先知道繼承(Inheritance)。Encapsulation、Inheritance、以及Polymorphism合稱物件導向模式的三大特色注意,有非常多的專家學者強調不要為了符合這三大特色而犧牲了reusability和maintainability15Inheritance16InheritanceSuperclassesvs.subclassesbaseclassesvs.derivedclasses子類別的物件自動繼承父類別的特性(包含屬性以及行為)protected,private,andpublic(避免把問題複雜化了,自己去了解none在繼承架構所扮演的角色)產生繼承架構的方式specializationgeneralization17Example常見的範例:圓形以及矩形。如何定義一個圓形、矩形。18ExamplepublicclassPoint{protectedintx,y;//coordinatesofthePointpublicPoint(){setPoint(0,0);}publicPoint(inta,intb){setPoint(a,b);}publicvoidsetPoint(inta,intb){x=a;y=b;}publicintgetX(){returnx;}publicintgetY(){returny;}publicStringtoString(){return[+x+,+y+];}}19ExamplepublicclassCircleextendsPoint{protecteddoubleradius;publicCircle(){//implicitlycallsuperclass'sconstructoroccursheresetRadius(0);}publicCircle(doubler,inta,intb){super(a,b);setRadius(r);}publicvoidsetRadius(doubler){radius=(r=0.0?r:0.0);}publicdoublegetRadius(){returnradius;}//新增:CalculateareaofCirclepublicdoublearea(){returnMath.PI*radius*radius;}//1.改寫:converttheCircletoaString//2.存取Point內的屬性x與y就跟存取自己的屬性一樣//3.稱為overridingpublicStringtoString(){returnCenter=+[+x+,+y+]+;Radius=+radius;}}20Example請你為一家公司設計一套人事資訊系統,這套系統要能夠讓人事室的員工隨時新增、刪除、修改、以及查詢員工資料。首先,討論我們需要記錄員工的哪些資料經仔細的討論後,我們發現員工分成兩類--領固定薪資的員工以及依照工作時數的員工(當然還有可能是領取營業績效的員工)。請以specialization以及generalization的方式來完成繼承架構。21InheritanceInheritanceis-arelationshipAggregationhas-a(orpartof)relationshipAnemployeehasabirthdateclassEmployee{Stringname;Datebirthdate;}TherelationshipsbetweenShape,Point,Circle,andRectangle.Inheritancevs.Aggregationtobediscussedlater.conclusions:usethemwisely.22Exercise範例Imagineapublishingcompanythatmarketsbo
本文标题:物件导向程式设计(object-oriented
链接地址:https://www.777doc.com/doc-3484663 .html