19
www.sutol.cz Proč programovat v LS objektově Jiří Krákora, Alliance Healthcare

Proč programovat v LS objektově

  • Upload
    gitel

  • View
    43

  • Download
    0

Embed Size (px)

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

Page 1: Proč programovat v LS objektově

www.sutol.cz

Proč programovat v LS objektově

Jiří Krákora, Alliance Healthcare

Page 2: Proč programovat v LS objektově

www.sutol.cz

Princip

Page 3: Proč programovat v LS objektově

www.sutol.cz

Rozdíl

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

Jednoúčelový vs. Univerzální

Page 4: Proč programovat v LS objektově

www.sutol.cz

Objekt jako dílek stavebnice Lego

Page 5: Proč programovat v LS objektově

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

Page 6: Proč programovat v LS objektově

www.sutol.cz

OOP je modulární

Page 7: Proč programovat v LS objektově

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ý…

Page 8: Proč programovat v LS objektově

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

Page 9: Proč programovat v LS objektově

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

Page 10: Proč programovat v LS objektově

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

Page 11: Proč programovat v LS objektově

www.sutol.cz

Čitelnost kódu

Page 12: Proč programovat v LS objektově

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í

Page 13: Proč programovat v LS objektově

www.sutol.cz

Příklad

Page 14: Proč programovat v LS objektově

www.sutol.cz

Příklad

Page 15: Proč programovat v LS objektově

www.sutol.cz

Příklad

Page 16: Proč programovat v LS objektově

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

Page 17: Proč programovat v LS objektově

www.sutol.cz

Příklad

Page 18: Proč programovat v LS objektově

www.sutol.cz

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

OOP je běh na dlouhou trať…

Page 19: Proč programovat v LS objektově

www.sutol.cz

Děkuji za pozornost