proč programovat v ls objektově
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 PresentationTRANSCRIPT
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