Proč programovat v LS objektově

Preview:

DESCRIPTION

Proč programovat v LS objektově. Jiří Krákora, Alliance Healthcare. Princip. Rozdíl. Perzistentní vs. Transientní Kompaktní vs. Modulární Jednoúčelový vs. Univerzální. Objekt jako dílek stavebnice Lego. Atributy OOP. Modulárnost aplikace Znovupoužitelnost modulů - PowerPoint PPT Presentation

Citation preview

www.sutol.cz

Proč programovat v LS objektově

Jiří Krákora, Alliance Healthcare

www.sutol.cz

Princip

www.sutol.cz

Rozdíl

Perzistentní vs. TransientníKompaktní vs. Modulární

Jednoúčelový vs. Univerzální

www.sutol.cz

Objekt jako dílek stavebnice Lego

www.sutol.cz

• Modulárnost aplikace• Znovupoužitelnost modulů• Přenositelnost funkcí• Abstrakce problému• Zapouzdření algoritmů• Čitelnost kódu• Dědění tříd• Single responsibility

Atributy OOP

www.sutol.cz

OOP je modulární

www.sutol.cz

Příklad

Pracuji se zapouzdřeným dílkem stavebnice, který je obecně použitelný, lehce přenositelný a pro nezúčastněného i lehce čitelný…

www.sutol.cz

• Třída je architektonický plán• Vidím výslednou aplikaci, atomizovanou na

množinu logických celků• Logické celky řeším samostatně, bez

ohledu na zbytek aplikace• Každý problém abstrahuji a řeším v obecné

rovině

Abstrakce

www.sutol.cz

Příklad class Class Mo...

NABManager

- CDb: NotesDatabase- LookupView: NotesView- GroupView: NotesView- NDb: NotesDatabase- IsOpen: Boolean- Err: String

+ Open(String) : Boolean+ CreatePerson(String) : Person+ GetPerson(String) : Person+ RemovePerson(Boolean, String) : Boolean+ AddPersonToGroup(Boolean, Person, String) : Boolean+ AddPersonToDenyGroups(Person) : Boolean+ RemovePersonFromAllGroups(Person) : Boolean+ CreateGroup(String) : Group+ GetGroup(String) : Group+ RemoveGroup(String) : Boolean- IsReplica(String) : Boolean- GetCurrentDatabase() : NotesDatabase

«Property Get»+ ErrorMsg() : String+ Database() : NotesDatabase+ IsOpen() : Boolean

Person

- FullName: TrigateName

«Property Get»+ FullName() : TrigateName+ AsNotesName() : NotesName+ Canonical() : String+ Abbreviated() : String+ Common() : String+ Document() : NotesDocument

«Property Set»+ FullName() : NotesName+ AsNotesName() : NotesName

GenericObjectListItem

«Property Get»+ ID() : String

«Property Set»+ ID() : String

GenericObjectList

- ObjectList: List As GenericObjectListItem- CurrentItem: GenericObjectListItem- Count: Long

+ Add(Variant, String) : void+ Get(String) : Variant+ GetFirst() : Variant+ GetNext(GenericObjectListItem) : Variant

«Property Get»+ CurrentItem() : Variant+ Count() : Long+ IsEmpty() : Boolean

TrigateName

- Name: NotesName

«Property Get»+ AsNotesName() : NotesName+ Common() : String+ Abbreviated() : String+ Canonical() : String+ IsHierarchical() : Boolean+ IsEmpty() : Boolean+ FirstName() : String+ LastName() : String+ ShortName() : String

Group

- ListName: String

+ SetName(String) : void+ AddMember(TrigateName) : void+ RemoveMember(Person) : Boolean

«Property Get»+ ListName() : String+ Members() : GenericObjectList+ Document() : NotesDocument

«Property Set»+ ListName() : String

GenericDocument

- Doc: NotesDocument

+ ReplaceItemValue(String, String) : void+ GetItemValue(String) : Variant+ AppendToItem(String, String) : void+ Save(Boolean) : void

«Property Get»+ Document() : NotesDocument

«Property Set»+ Document() : void

www.sutol.cz

Zapouzdření class Class Mo...

NABManager

- CDb: NotesDatabase- LookupView: NotesView- GroupView: NotesView- NDb: NotesDatabase- IsOpen: Boolean- Err: String

+ Open(String) : Boolean+ CreatePerson(String) : Person+ GetPerson(String) : Person+ RemovePerson(Boolean, String) : Boolean+ AddPersonToGroup(Boolean, Person, String) : Boolean+ AddPersonToDenyGroups(Person) : Boolean+ RemovePersonFromAllGroups(Person) : Boolean+ CreateGroup(String) : Group+ GetGroup(String) : Group+ RemoveGroup(String) : Boolean- IsReplica(String) : Boolean- GetCurrentDatabase() : NotesDatabase

«Property Get»+ ErrorMsg() : String+ Database() : NotesDatabase+ IsOpen() : Boolean

www.sutol.cz

Čitelnost kódu

www.sutol.cz

• Každý objekt může mít libovolný počet potomků

• Všichni potomci dědí vlastnosti i metody rodičovského objektu

• Potomci rozšiřují funkcionalitu rodiče, nebo mění vnitřní strukturu

Dědění

www.sutol.cz

Příklad

www.sutol.cz

Příklad

www.sutol.cz

Příklad

www.sutol.cz

• Princip jedné odpovědnosti• Každý objekt by měl být zodpovědný za

jednu konkrétní věc• Očekávané služby by měly být spjaty s

touto odpovědností• Důvodem je větší robustnost tříd s jednou

odpovědností

Single responsibility

www.sutol.cz

Příklad

www.sutol.cz

… ale čím déle běžíte, tím se vám běží lépe

OOP je běh na dlouhou trať…

www.sutol.cz

Děkuji za pozornost