2. Programare procedurala
Decide procedurile necesare.
Alege cei mai buni algoritmi pentru ele.
Programare modulara
Decide modulele necesare.
Imparte programul astfel incat datele sa fie ascunse in module.
Programare generica
Decide algoritmii necesari.
Ii parametrizeaza pentru a fi functionali pe mai multe tipuri de date.
Programare obiect
Decide clasele necesare.
Proiecteaza un set de operatii pentru ele.
Generalizeaza prin relatia de mostenire.
Particularizeaza prin polirmofism.
3. Totalitatea
• conceptelor
• legilor
care fundamenteaza programarea obiect.
Concept|aspect esential ce poate fi definit matematic.
Lege|regula care stabileste un raport esential intre doua concepte.
Lege:
capsula e prinsa de roata
Daca nu e prinsa, sistemul nu este
functional, iar parcul de distractii
da faliment.
Concept: capsula Concept: roata
Adica o cabina cu scaune Adica o structura circulara
care urca si coboara. care se invarte incet.
4. Abstractizare
Identifica aspectele generale G.
Ignora aspectele particulare P|se va ocupa cineva mai jos de ele...
Cerc
Are raza si punct central.
Roata Spinner
Are in plus spite si metal. Are in plus viteza si sens.
Roata de distractii
Are in plus cabine cu scaune.
5. Incapsulare
Ascunde implementarea de client si combina starea cu comportarea.
Nu stim
Roata metalica Invartitoare
De unde avem materialul? Ce fel de motor o misca?
Cum au fost facute spitele? De unde ia energie?
Roata de distractii
Sunt ele legate de spite sau de roata?
Se deschid usile la 100m inaltime?
Stim
Ca functioneaza corect.
Ca nu prea avem cum sa o stricam*...
6. Modularizare
Imparte aplicatia in module|un fel de Divide et Impera.
Rezolva modulele independent si integreaza-le.
Structura Motor
Fa rost de cadru. Fa rost de bloc motor.
Fa rost de spite. Fa rost de rezervor.
... ...
Integreaza-le in structura. Integreaza-le in motor.
Roata de distractii
Fa rost de un motor.
Fa rost de o structura.
...
Integreaza-le in roata de distractii.
7. Polimorfism
Fiecare concept are comportamentul lui.
Conceptele au comportamente care arata la fel.
Elice de moara
Daca vine Don Quijote, fa v infinit.
Daca pleaca Don Quijote, fa v zero.
invarte|roteste spre dreapta cu viteza v
Invartitoare
invarte|roteste
Roata de distractii
Daca e prea mare greutatea, scade v.
Daca nu are pasageri, fa v zero.
Daca s-a tras semnal de cutremur, fa v zero*.
Daca s-a rotit 10 minute, inverseaza s.
invarte|roteste cu viteza v in sensul s
Toate cele trei se numesc sintactic invarte, dar se comporta diferit.
8. Abstractizare
Identifica aspectelor generale G.
Ignora aspectele particulare P|se va ocupa cineva mai jos de ele...
Incapsulare
Ascunde implementarea fata de client.
Modularizare
Imparte aplicatia in module|un fel de Divide et Impera.
Rezolva modulele independent si integreaza-le.
Mostenire
Clasifica pe nivele de abstractizare de la G la P|ierarhizare.
Polimorfism
Fiecare concept are comportamentul lui.
Conceptele au comportamente care arata la fel.
9. Clasa Clasa
Conceptual Programatic
Descrie o colectie de obiecte Structura de date
printr-un set comun de: ce descrie:
• stari posibile, • atribute,
• comportamente posibile. • metode.
Invartitoare class invartitoare {
sta|se invarte stari private boolean moves = false; // atribut
public void start() { // metoda
start comportament moves = true;
stop comportament }
public void stop() { // metoda
moves = false;
}
}
10. Obiect Obiect
Conceptual Programatic
Ceva caracterizat prin: Variabila caracterizata prin:
• identitate, • nume,
• stare, • atribute,
• comportament. • metode.
Inv
Inv invartitoare1 = new Inv();
invartitoare1 identitate
sta stare
start|stop comportament
invartitoare2 identitate Inv invartitoare2 = new Inv();
se invarte stare invartitoare2.start();
start|stop comportament
11. Mesaj Obiect
Conceptual Programatic
Forma de comunicare Una sau mai multe metode.
intre obiecte.
+ Variante:
Motor m = new Motor(putere);
Motorul invarte roata Roata r = new Roata(greutate);
Motorul invarte mai multe roti? poate m.invarte(r);
Cine are viteza si sensul? roata si/sau motorul
Cine ii spune motorului sa invarta roata? noi/auto Motor m = new Motor(putere);
Roata r = new Roata(greutate);
m.adauga(r); // daca r e prea grea?
m.invarte(); // for r in m.roti m.invarte(r)
12. Mostenire
Mecanismul prin care obiectele particulare preiau starea si
comportamentul obiectelor generale.
Principiul substituirii Barbara Liskov, 1987 adaptare
Obiectele clasei care mosteneste pot aparea
oriunde apar obiectele clasei mostenite.
Discutie
Importanta preconditiei si postconditiei.
De sus in jos, taria preconditiei scade. L </=/> l
De sus in jos, taria postconditiei creste.
Solutie ? L=l
Nicio clasa specializata sa nu aiba preconditie extra,
fata de clasa/clasele pe care o specializeaza.
13. Pentru a o invarti, motorul trebuie sa fie intr-o anume relatie cu roata.
Relatia de asociere
Reprezinta o familie de legaturi intre obiectele a doua clase.
Poate avea necunoastere si multiplicitate: 0..1, 0..n, 1, 1..n.
Roata este invartita de un Motor necunoscut.
Motorul invarte zero sau mai multe Roti.
14. Roata are una sau mai multe capsule cu scaune pentru privitori.
Relatia de agregare
Reprezinta o familie de legaturi de forma are niste intre obiecte.
Poate avea necunoastere si multiplicitate: 0..1, 0..n, 1, 1..n.
Roata are prinse una sau mai multe Capsule.
Capsula are o Roata pe care este prinsa.
15. Capsula in uz are o legatura metalica in uz cu roata.
Relatia de compozitie
Reprezinta o familie de legaturi
puternice de forma are niste.
Poate avea necunoastere
si multiplicitate: 1, 1..n
Agregare
Compozitie
CapsulaInUz are o LegaturaMetalica...
LegaturaMetalica are o CapsulaInUz...
16. Principiul inchis deschis Betrand Meyer, 1988
Entitatile software sunt inchise la modificare si deschise la extindere.
Modele de proiectare
Probleme care se petrec repetat, ale caror solutie este descrisa astfel
incat sa fie folosita repetat fara a fi modificata repetat.
Elemente principale
• nume,
• problema de rezolvat,
• solutie propusa,
• consecinte,
• aplicabilitate.
17. Problema de rezolvat
Se doreste crearea unei clase cu un singur obiect.
Solutie propusa
Blocarea crearii de instante din exterior prin suprascriere.
Accesul la o instanta statica creata din interiorul clasei.
Consecinte
Reducerea costurilor de memorie pentru variabile globale.
Acces controlat la unica instanta.
Aplicabilitate
Naveta jucator | daca este unul singur.
Manageri de obiecte.
Harti.
18. Problema de rezolvat
Se doreste crearea de obiecte care vad ce se intampla cu altele.
Solutie propusa
Observatul|stiu obiectele care ma vad si le zic cand ma actualizez.
Observatorul|se anunta ca observator la observat.
Consecinte
Relatii intre obiecte bazate pe anumite stari si comportamente.
Executie (a)sincrona a elementelor aplicatiei.
Aplicabilitate
Orice event listener este un observer.
19. Problema de rezolvat
Se doreste crearea de instante de obiecte multiple.
Solutie propusa
Clasele se inregistreaza la fabrica, oferind o metoda de creare a
instantelor lor. Fabrica creeaza instante din clasele inregistrate.
Consecinte
Crearea de instante de multe tipuri de catre o autoritate centrala.
Se foloseste de mostenire.
Aplicabilitate
Manageri de jucatori.
Manageri de inamici.
... sunt de fapt manageri de nave.
21. Curs Programare Orientata Obiect 2008 2009
Principala sursa de documentare
Prof. Dr. Dorel Lucanu
Prof. Dr. Gheorghe Grigoras
Facultatea de Informatica Iasi
Wikipedia
Diagrame de clasa, exemple
http://en.wikipedia.org/wiki/Class_diagram
Stock Exchange
Imagini
http://sxc.hu/