Post on 01-Mar-2020
transcript
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Asigurarea Calităţii (Asigurarea Calităţii (QAQA))Asigurarea Calităţii (Asigurarea Calităţii (QAQA))Principii de implementarePrincipii de implementarep pp p
Ciprian DobreCiprian Dobreciprian.dobre@cs.pub.ro
Instrumente pentru dezvoltarea programelor – Curs 7 1
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
SumarSumarSu aSu a
• Erori Java comune• Câteva elemente de ghidaj în scrierea de
cod Javacod Java• Refactorizare• Modularitate
Ascunderea Informaţiilor• Ascunderea Informaţiilor
2Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Erori Erori Java Java ComuneComune
To err is human,but to really foul things up
you need a computeryou need a computer.(Paul Ehrlich)
3Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Accesarea Membrilor NonAccesarea Membrilor Non--Statici din Statici din M t d St tiM t d St tiMetode StaticeMetode Statice
• Membrii non-statici aparţin unor obiecteM b ii t ti i ţi i l• Membrii statici aparţin unei clase
• Dacă nu aveţi un obiect nu puteţi nici accesa un membru non-staticnon-static
• this se referă la obiectul asupra căruia o metodă non-statică este apelată public class Demo {ppublic class Demo {
public int x = 1;bli id () { }
public class Demo { public int x = 1;public void m() { }
bli t ti id ipublic void m() { }public static void main(String[] args) {
public static void main(String[] args) {
Demo d = new Demo();int y = x;m();Object o = this;
int y = d.x;d.m(); Object o = d;
4
} } } }
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Nume de metode greşite la Nume de metode greşite la suprascrieresuprascriere
• Java suportă polimorfismul prin mecanismul de overridingO f– O superclasă A defineşte o metodă m
– O subclasă B a lui A poate defini propria metodă m, suprascriind definiţia metodei din ATipul obiectului din care este apelată metoda m decide ce versiune a lui m– Tipul obiectului din care este apelată metoda m decide ce versiune a lui meste în final folosită (cea definită în A sau cea definită în B)
• Problemă: atunci când definiţia metodei din subclasă foloseşte numele metodei în mod greşit faţă de metoda din superclasă suprascrierea nu g ş ţ p pmai poate funcţiona
• Simptom: o metodă nu ajunge să fie apelată; nu se generează nici un warning la nivel de compilator
• Problema poate fi depistată prin trasarea fluxului de control al programului
public class Demo extends WindowAdapter {public class Demo extends WindowAdapter { // This should be “windowClosed” !!! public void windowClose(WindowEvent e) {
S t it(0)
Programulnu se opreşte
după închiderea
5
System.exit(0); } }
pferestrei!!!
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Suprascrieri cu semantici diferiteSuprascrieri cu semantici diferiteSup asc e cu se a t c d e teSup asc e cu se a t c d e te• Aveţi grijă ca orice metodă suprascrisă să păstreze
semantica metodei originale• Altfel: posibil comportament ciudat în părţi ale programului
ce par a fi implementate corect• Exemplu: folosirea in NZ a “Goods and Services Tax”• Exemplu: folosirea in NZ a Goods and Services Tax
conform cazului in Germania; semantici incompatibile!!!public class Product {public class Product {
public double grossPrice;public double netPrice() {
return 1 125*grossPrice; // in NZ: 12 5% GSTreturn 1.125*grossPrice; // in NZ: 12.5% GST} }
public class Food extends Product {public class Food extends Product {public double netPrice() {
// in Germania: GST e 7% pentru alimentereturn 1 07*grossPrice;
6
return 1.07*grossPrice;} }
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Gestiunea ExcepţiilorGestiunea ExcepţiilorGest u ea cepţ oGest u ea cepţ o• În Java: multe excepţii trebuie fie prinse, fie declarate• Adesea excepţiile sunt prinse fără o gestionare adecvată• Problemă: atunci când este aruncată o excepţie acest lucru nu mai
devine vizibil• Problema ce a cauzat excepţia poate cauza diverse alte probleme mai
târziutârziupublic double reciprocal(double x) {
double y = 0;try {
y = 1/x; // ArithmeticException for x==0} catch (Exception e) {} // no handlingreturn y; // returns 0 for x==0
}
…} catch (Exception e) {
System.out.println(e);}
7
}…
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Câteva eroriCâteva erori & & excepţii importanteexcepţii importanteCâte a e oCâte a e o && e cepţ po ta tee cepţ po ta te1. Nu faceţi confuzie între = şi ==2 Nu faceţi confuzie între == şi equals2. Nu faceţi confuzie între == şi equals3. Indicii de array încep cu 0 ( off-by-one error)4. Tipurile primitive sunt diferite de tipurile referite4. Tipurile primitive sunt diferite de tipurile referite
(call-by-value vs. call-by-reference)5. Numele unui fişier.java trebuie să fie acelaşi cu
numele primei clase/interfeţe din elnumele primei clase/interfeţe din el6. Java este case sensitive7. Aţi recompilat programul după ce a suferit modificări?ţ p p g p
NullPointerExceptionObject o = null;
ArithmeticExceptionint x = 4/0;
ClassCastExceptionInteger i = (Integer)j ;
o.getClass();/ ;g ( g )
"hello";
ArrayStoreException IndexOutOfBoundsException
8
Object x[] = new String[3]; x[0] = new Integer(0);
Object x[] = new String[3]; x[3] = "hello";
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Java Coding GuidelinesJava Coding GuidelinesJava Coding GuidelinesJava Coding Guidelines
9
9
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Convenţii de numeConvenţii de nume1. Numele claselor şi interfeţelor întotdeauna încep cu litere
marie g Demo Panel GridbagLayoute.g. Demo, Panel, GridbagLayout
2. Numele membrilor, parametrilor metodelor şi a variabilelor locale încep cu litere mici, e.g. getMax, startS f C C “3. Se foloseşte CamelCase, i.e. un cuvânt nou este “separat” printr-o literă mare, e.g. getMainPanel
4. Numele de pachete sunt scrise cu litere mici, e.g.4. Numele de pachete sunt scrise cu litere mici, e.g. java.awt.color
5. Constantele static final ar trebui scrise cu litere mari, cu cuvinte separate prin underscore (" ") e gcu cuvinte separate prin underscore ( _ ), e.g. MIN_WIDTH
6. Numele de parametrii de tip pentru elemente generice ar t b i ă ţi ă i ă lit ătrebui să conţină o singură literă mare, e.g. List<T>
7. Câteva alte convenţii:• Prefixe de nume pentru interfeţe e g ICollection
10
Prefixe de nume pentru interfeţe, e.g. ICollection• Prefixe de nume pentru variabile private, e.g. _size
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Altele...Altele...te ete e• Gestiunea condiţiilor de eroare (e.g. throw and handle
Exception)p )• Comentariile aferente codului, în mod particular atunci când
nu este clar ce funcţie este implementată de o secvenţă de codcod– Comentariile se pun la începutul unei clase/metodă/variabilă
La ce e utilă clasa/metoda/variabila?De asemenea se comentează anumite instrucţiuni “cheie”– De asemenea se comentează anumite instrucţiuni cheie
• Nu se folosesc căi absolute de fişiere în codul sursă pentru că computere diferite au foldere diferite( “ \ f ld \ fil t t”)(e.g. “c:\myfolder\myfile.txt”) Se folosesc în schimb căi relative la folderul aplicaţiei(e.g. “subfolder\myfile.txt”)
• Indentaţia urmăreşte structura programului• Adăugarea unei linii goale între blocuri logice de instrucţiuni
din cadrul aceleaşi metode
11
din cadrul aceleaşi metode• Definirea unei singure interfeţe/clase într-un fişier
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
RefactorizareRefactorizare
There's always roomfor improvement, you knowfor mprovement, you know
- it's the biggest room in the house(L H Leber)
12
(L. H. Leber)
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
RefactorizareaRefactorizareae acto a eae acto a ea• “Arta de a îmbunătăţi designul codului existent într-un mod corect”• Rescrierea codului sursă pentru a îmbunătăţi designul sau modul deRescrierea codului sursă pentru a îmbunătăţi designul sau modul de
înţelegere ("cleaning it up“ - XP)• Refactorizarea poate schimba modul CUM funcţionează codul dar NU
CE face acesta (conservarea semanticii)( )– Nu se referă la repararea de bug-uri sau adăugarea de noi funcţionalităţi– Modificările pot fi minore sau foarte mari– Modificările pot fi făcute asupra mai multor fişiere sursă simultan
• Încurajează programarea exploratorie, rescrierea codului, calitatea mărită a codului livrat
• Cazurile de test ajută la verificarea că modificările nu duc la fmodificarea semanticii
• Lucrările despre refactorizare descriu indicatori pentru probleme comune de proiectare (“smells”) şi posibile soluţii (“refactorings”)
F l M ti (1999) R f t i I i th D i f E i ti– Fowler, Martin (1999). Refactoring. Improving the Design of Existing Code. Addison-Wesley.
– Wake, William C. (2003). Refactoring Workbook. Addison-Wesley.
13Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
SimplitateSimplitateS p tateS p tate• Simplitatea reprezintă un principiu foarte important pentru
refactoizare: putem rescrie codul a.î. să devină mai simplu p p(de înţeles)?
• Evitarea complexităţii inutile, e.g.Înlăturarea codului neutilizat/nenecesar– Înlăturarea codului neutilizat/nenecesar
– Folosirea de nume clare, sugestive şi simple– În XP: nu se foloseşte mai multă codare decât absolut necesar
“H k il d ” î d l d â d• “Hack-urile deştepte” nu au întotdeauna valoare, decât de a confuza şi mai mult oamenii
• Codarea pentru oameni: claritate, accesibilitate, înţelegereCodarea pentru oameni: claritate, accesibilitate, înţelegere• Capacitatea de mentenanţă mai importantă decât
performanţa(l l i M t il i l t ţ i ft )(legea lui Moore vs. costurile mari ale mentenanţei software)
• KISS ("Keep it Short and Simple"), Occam's razor, Einstein: "everything should be made as simple as possible, but no
14
y g p p ,simpler"
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
SmellSmell: Long Method: Long MethodS eS e o g et odo g et od• Simptom: multe linii de cod (LOC) într-o singură metodă
(>> 10 LOC poate fi considerată o euristică)( p )• Cauza: un programator tot adaugă cod într-o singură metodă• Soluţia: găsirea unor grupuri coerente de instrucţiuni şi extragerea
unor metode din acestea• Rezultat: înţelegere mai bună, structură mai clară, procent ridicat de
abstractizare şi reutilizare• Scăderea în performanţă este cel mai adesea neglijabilăp ţ g j
void m() {double[] data = {4.2, 6.4, 1.5, 9, 10.1};
double avg(double[] d)
double sum(double[] d)double avg = 0;for(double x : data) avg += x;avg /= data.length;
double var(double[] d)
double var = 0;for(double x : data) var += (x-avg) * (x-avg);var /= data.length;
15
}
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
SmellSmell: Large Class: Large ClassS eS e a ge C assa ge C ass• Simptome: un număr prea mare de instanţe de variabile,
metode sau LOCmetode sau LOC• Cauze:
– Clasa a devenit “supraîncărcată” prin adăugarea incrementală a tot i lt f ţi lităţi fă ă i t bi t bilitmai multor funcţionalităţi fără un proiect bine stabilit
– Conceptul de bază a fost prea puţin înţeles şi/sau reprezintă un conglomerat al mai multor concepte
P bl ă l i d f l ă i î ă• Problemă: clasa pierde forma clară; nu mai încorporează un singur concept cu o funcţionalitate unică bine-definită
• Soluţii:ţ– Extragerea unor clase încorporând propriile concepte– Extragerea unor subclase ce implementează funcţionalităţi specifice– Extragerea unor interfeţe ce definesc precis funcţionalităţileExtragerea unor interfeţe ce definesc precis funcţionalităţile
implementate• Rezultat: simplitate & claritate a părţilor componente, şanse
mai mari de abstractizare & refolosire
16
mai mari de abstractizare & refolosire• Ex: GUI combinat cu modelul de date şi/sau logica aplicaţiei
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
SmellSmell: Magic Number: Magic NumberS eS e ag c u beag c u be• Simptome: o valoare constantă (“literal”) e definită de mai
multe ori, chiar în câteva locaţii diferite, ţ• Cauze: valoarea este folosită ad hoc doar atunci când este
nevoie de ea; nu se anticipează nici o folosire ulterioarăProbleme:• Probleme:– Multe dependenţe introduse prin duplicare în diverse locuri a aceloraşi
constante sau a unor valori derivate ale acestoraG d ţi t d l– Greu de menţinut codul
– Uşor de introdus buguri prin modificările incomplete• Soluţia: păstrarea într-un singur loc și înlocuirea literalilor cu ţ p g ș
constante simbolice (static final) sau enumerări: enum Gender { MALE, FEMALE }
• Exemple:Exemple:– Constante din matematică/fizică (pi, e, factori de conversie, ...)– Numere de identificare (elemente speciale de date, erori, ...)
Setări ale configuraţiei (e g nume de fişiere comportamentul
17
– Setări ale configuraţiei (e.g. nume de fişiere, comportamentul programului)
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Cod duplicatCod duplicatCod dup catCod dup cat• Simptome:
– Două fragmente de cod arată (aproape) identicD ă f t d d i l t ă ( ) l i l– Două fragmente de cod implementează (aproape) acelaşi lucru
• Cauze:– Mai mulţi programatori lucrând independent
D li t ă fi hi tât d d b t f t– Duplicarea poate să nu fie chiar atât de uşor de observat sau nu a fost anticipată
– Programatorii adesea copiază şi adaptează cod în funcţie de necesităţile lor curente
• Soluţia: extragerea de metode– Dacă codul duplicat implementează acelaşi lucru: alegerea şi substituirea
algoritmului superior (sau chiar merge între cele două)– Dacă duplicarea apare în clase pereche: extragerea de metode şi
câmpuri şi plasarea lor într-o superclasă; formarea unor metode şablon• Exemple:
Mi i t k i ili ( t l ă i l t l ) t– Mici task-uri auxiliare (e.g. sortarea numerelor, găsirea elementelor) sunt rezvoltate ad hoc
– Cerinţe înrudite duc la implementearea de UI sau logică a programului similare
18
similare
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Metode şablonMetode şablonşş• Algoritmul este adesea acelaşi pentru mai multe tipuri de date înrudite
(siblings), cu diferenţe doar de detaliiIdea descrierea paşilor com ni generali ai algoritm l i într o metodă a• Idea: descrierea paşilor comuni, generali ai algoritmului într-o metodă a superclasei (metodă şablon); detaliile sunt plasate în metode ajutătoare a subclaselor
abstract class Game {int numPlayers;
class Chess extends Gamey ;
abstract void makeTurn(int player);abstract int getWinner();final void play() {
e te ds Ga e{ …Chess() { numPlayers = 2;p y() {
while(getWinner()==0)for(int p=1;p<=numPlayers;p++)makeTurn(p);
numPlayers 2;}void makeTurn(int p) { }a e u (p);
System.out.println("Player "+getWinner()+" wins");
}
(int p) { … }
int getWinner(){ }
19
}}
{ … }}
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
“Ask What Kind” Anti“Ask What Kind” Anti--PatternPattern((M t iM t i Si l tSi l tăă))((Moştenirea Moştenirea SimulatSimulatăă))
• Simptom: metoda foloseşte switch sau mai multe if-uri(posibil cu instanceof) pentru a distinge între diverse(posibil cu instanceof) pentru a distinge între diverse tipuri de obiecte
• Cauze: concepte înrudite dar diferite nu sunt reprezentate în clase diferite lipsa polimorfism l i la ni el de metodăclase diferite, lipsa polimorfismului la nivel de metodă
• Soluţia:– Reprezentarea diferitelor tipuri în diverse subclasep p– Implementarea comportamentului specific în subclase prin
suprascrierea metodelor– Metoda specifică subclasei este
class C {void m() { generic }p
invocată automat (“don’t ask what kind”)class C {String type;
void m() { generic }}class A extends C {
1String type;void m() {if(type.equals("A")) m1();if(type equals("B")) m2();
void m() { m1 }}class B extends C {
20
if(type.equals("B")) m2();} } void m() { m2 }
}Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Refactorizarea în EclipseRefactorizarea în Eclipsee acto a ea c psee acto a ea c pse• Selectare cod sursă,
right-click şi folosire submeniu Refactorg ş• Refactorizarea cu preview al modificărior
(modificări individuale pot fi acceptate)
• Cu selectarea numelui unei metode: Rename, Inline, Pull Up, Push Down, I t d I di ti Ch M th d Si tIntroduce Indirection, Change Method Signature, …
• Cu selectarea numelui unui câmp: Rename, Pull Up, Push Down, Encapsulate Field, , p, , p ,Generalize Declared Type, …
• Cu selectarea numelui unei clase:Rename Move Extract Interface Extract SuperclassRename, Move, Extract Interface, Extract Superclass,Use Supertype Where Possible, …
• Cu selectarea unor instrucţiuni: Extract Method
21
• Cu selectarea unor expresii: Extract Constant
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
SumarSumarSu aSu a• Există erori Java comune, e.g.
A b il t ti i di t d t ti– Accesarea membrilor non-statici din metode statice– Probleme de suprascriere
G i i fi i ă il– Gestiunea insuficientă a erorilor• Convenţiile de nume şi alte reguli trebuie respectate• Refactorizarea presupune îmbunătăţirea designului
codului existent• “Refactoring” - soluţii la probleme comune de
design adesea indicate prin “smells”, e.g.– Metode lungi sau clase mari– Cod duplicat
22
– Antişabloane precum "magic numbers" şi "ask what kind"Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
QuizQuizQuizQuiz
1. De ce este importantă gestiunea e ce es e po a ă ges u eaexcepţiilor atunci când ele sunt aruncate?
2. Ce rol are refactorizarea în organizarea funcţionalităţii unui program?ţ ţ p g
3. Ce reprezintă o metodă şablon?
23Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
ModularitModularitateateModularitModularitateate
LEGO is not a toy.It’s a way of life.y
(Mike Smith)
24
24
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
ModularitateModularitateodu a tateodu a tate• Sistemele complexe pot fi adesea descompuse în părţi
mai mici numite modulemai mici numite module• Modul: componentă de sine stătătoare a unui sistem
– Are o interfaţă bine-definită cu alte module– Separă interfaţa de implementare– Adesea corespunde unui set de tipuri de date sau cod, similar
pachetelor Java• Sistemul modular (i.e. sistem compus din module) este
mai uşor de înţeles, dezvoltat şi menţinut– Atunci când lucrăm cu un modul detaliile celorlalte module pot fi p
ignorate (separaţia preocupărilor)– Modulele pot fi dezvoltate independent– O mai bună izolare între module poate preveni ca un defect dintr-p p
un modul să cauzeze defectarea altor module– Modulele pot fi schimbate cu alte module– Modulele pot fi refolosite în alte sisteme
25
p
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
ModularitateModularitateodu a tateodu a tate
• Component frameworks– Suportă dezvoltarea şi conectarea unor module– Format pentru specificarea interfeţelor de module– Funcţionalitate pentru încărcarea, conectarea, şi
rularea modulelor• Module interconnection languages
– Permit specificarea interconectării modulelor într-un psistem la un nivel înalt
– Programming-in-the-small: codarea unui modul– Programming-in-the-large: asamblarea unui sistem din
module
26Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
ModularitateModularitateodu a tateodu a tate
Exemplu: multimedia stream processing Exemplu: procesarea imaginii cu Blender
A dio
Denoiser Mixer
MPEG4
imaginii cu BlenderAudioSource Ch1AudioSourceVideo NTSC to PAL
MPEG4Encoder
Audio In
Ch2Normalizer
27Source Converter Video In
27Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Separarea preocupărilorSepararea preocupărilorSepa a ea p eocupă oSepa a ea p eocupă o• Cum se poate gestiona eficient complexitatea unui sistem?• Separation of concerns (SoC)• Separation of concerns (SoC)
– Separarea problemelor (spargerea problemelor mari în piese mici) şi concentrarea pe rezolvarea uneia la un moment datS l i î f ţi lităţi di ti t ât– Spargerea programului în funcţionalităţi distincte ce se suprapun cât mai puţin posibil
– Concern: o bucată a unui program, adesea o funcţionalitate sau un comportament particular al programuluicomportament particular al programului
• Diverse moduri de implementare– Abordarea tradiţională bazată pe modularitate
Ζ În OO: separarea preocupărilor în clase şi metode– În UI-uri: separarea conţinutului de prezentare şi a prezentării de
logica aplicaţiei– Service-Oriented Architecture (SOA): împărţirea funcţionalităţii între
diferite servicii(-web)– Aspect-Oriented Programming (AOP): separarea preocupărilor în
"aspecte"
28
"aspecte"
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Coeziunea şi cuplareaCoeziunea şi cuplarea• Regulă pentru proiectarea modulelor: “cuplare slabă, coeziune mare”• Coeziunea: măsură a cât de bine lucrează împreună liniile de cod sursă
ale unui modul pentru a oferi o anumită funcţionalitate. În programarea p ţ p gOO, reprezintă gradul în care o metodă implementează o singură funcţie. Metodele ce implementează o singură funcţie sunt descrise ca având coeziune puternică.U d l t b i ă fi t i i• Un modul trebuie să fie puternic coeziv– Ar trebui să formeze o unitate de sine-stătătoare având o funcţie precisă– Părţile din modul lucrează împreună într-o manieră strâns cuplată
Î t d l t b i ă i t l l bă• Între module trebuie să existe cuplare slabă– Puţine dependenţe între module– Un modul este independent de implementarea internă a altui modul
M difi i l tă ii i d l ită difi lt d l– Modificarea implementării unui modul nu necesită modificarea altor module– Interacţiunea dintre module este restricţionată (prin intermediul unui interfeţe
stabile)– Fiecare modul ar trebui să poată fi înţeles fără a necesita înţelegereaFiecare modul ar trebui să poată fi înţeles fără a necesita înţelegerea
detaliilor altor module• Coeziunea şi cuplarea sunt adesea înrudite: cuplare slabă presupune
coeziune puternică şi vice versa
29
• În OO: mai puţine conexiuni între clase (low coupling) dacă grupăm metode înrudite ale unei clase împreună (high cohesion)
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Cuplarea în Programarea OOCuplarea în Programarea OOCup a ea og a a ea OOCup a ea og a a ea OO• Cuplarea este crescută între două clase A şi B dacă:
A t ib t f ă ( ti l) B– A are un atribut ce referă pe (are tipul) B– A apelează o metodă a lui B– A are o metodă ce referenţiază Bţ
(via return type, parametru sau variabilă locală)– A este o subclasă a (sau implementează) B
• Dezavantajele cuplării strânse includ:• Dezavantajele cuplării strânse includ:– Modificările unei clase adesea forţează modifică în alte clase– Greu de înţeles o clasă izolată– Greu de refolosit sau testat o clasă deoarece clasele dependente
trebuie să fie şi ele disponibile• Cuplarea slabă poate fi atinsă prin limitarea• Cuplarea slabă poate fi atinsă prin limitarea
responsabilităţilor unei clase/pachet
30Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Spaghetti CodeSpaghetti Code vvs. Modular Systems. Modular SystemSpag ett CodeSpag ett Code s odu a Systes odu a SysteSpaghetti Code• Conexiuni hazardoase probabil• Conexiuni hazardoase, probabil
crescute de-a lungul timpului• Nu există grupuri coeziveg p• Cuplare strânsă: interacţii sporite între
părţi aleatoare• Trebuie înţeles totul sau nimic
10 părţi, 13 conexiuni
• Trebuie înţeles totul sau nimic
Modular Systemy• Coeziune puternică în module• Cuplare slabă între module
f
10 părţi 13 conexiuni
• Modulele pot fi înţelese separat• Interacţiile dintre module sunt bine-
înţelese şi specificate în detaliu
31
10 părţi, 13 conexiuni,3 module
înţelese şi specificate în detaliu
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu: Windows NTExemplu: Windows NT
• Baza lui WinXP• Arhitectură stratificată
– Modulele suprapuse unele peste altelepeste altele
– Adesea un nivel poate accesa numai nivelul de
b lsub el• Cel mai de jos nivel
vorbeşte direct cuvorbeşte direct cu hardware-ul
• Cu cât mai sus, cu atât mai multă abstractizare introdusă faţă de hardware-ul fizic
Instrumente pentru dezvoltarea programelor – Curs 7 32
hardware ul fizic
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu: Joc 3DExemplu: Joc 3De p u Joc 3e p u Joc 3
AI CollisionD t tiAI
Scripting
Detection
Physics
ScriptingEngine
AnimationyEngine Engine
RenderingEngine
SceneManager
SoundEngine
InputS b t
EngineManagerEngine
33
Subsystem
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
ExExeemplmpluu: Google: Googleee pp uu Goog eGoog e• Încărcarea de date
necesită paralelism necesită paralelism puternic
• Mai multe module l â d ilucrând concurent şi asincron
• Arhitectură scalabilă• Arhitectură scalabilă• Comunicaţia adesea
se desfăşoară prinse desfăşoară prin intermediul unor baze de date
• Modulele pot fi optimizate în mod independent
34
independent
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Ascunderea InformaţieiAscunderea InformaţieiAscunderea InformaţieiAscunderea Informaţiei
Out of sight, out of mind.
Instrumente pentru dezvoltarea programelor – Curs 6 35
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Ascunderea informaţieiAscunderea informaţieiscu de ea o aţ escu de ea o aţ e• Ascunderea informaţiei ce nu trebuie să fie vizibilă pentru
a folosi o anumită clasă/modul/programa folosi o anumită clasă/modul/program• Prea multă informaţie poate produce confuzie: ce este
important pentru folosire şi ce nu?• Prea multă informaţie poate duce la dependenţe de
nedorit– Dacă aspectele interne sunt vizibile & accesibile, cineva ar putea p , p
să le folosească sau chiar să le modifice (e.g. crearea unui “hack” pentru a folosi ceva într-o manieră nedorită)
– Dacă aspectele interne sunt modificate atunci codul extern ce se b l t ă i f ţibaza pe ele s-ar putea să nu mai funcţioneze
• Permiterea numai accesului restricţionat oferă mai multă flexibilitate– Clasa/modulul/programul poate fi schimbată fără a afecta alte
componente– Multe decizii de proiectare pot fi ascunse iar proiectul sistemului
36
p p ppoate evolua fără a interfera
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
ScopScopScopScop• Locul unde declarăm o variabilă determină modul în care poate fi
accesată (i.e. Scopul acesteia)( p )• Scopul unei variabile ar trebui să fie întotdeauna cât mai restrâns cu
putinţă• Dacă o variabilă poate fi accesată acolo nu ar trebui să poată fi p p
accesată: confuzie şi greşeli• Scopul variabilelor tip instanţă > scopul variabilelor locale unei
metode > scopul variabilelor locale unui bloc de instrucţiuni
class C {int x;
class C {int x;
int y;int z;void m() { void m() {y = 0;for(z=0; z<10; z++) {y += z;
int y = 0;for(int z=0; z<10; z++) {y += z;
37
y} } }
y} } }
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Modificatori de accesModificatori de accesPot fi folosiţi pentru controlul accesului
public:clasa/interfaţa pot fi accesate din afara pachetului– clasa/interfaţa pot fi accesate din afara pachetului
– constructorii, metodele şi câmpurile pot fi accesate de oriunde poate fi accesată clasa acestora
protected:protected:– pot fi accesate de alte clase din acelaşi pachet– şi din orice subclasă a clasei în care au fost declarate
i t t fi t i di l î f t d l tprivate: pot fi accesate numai din clasa în care au fost declarateFără modificator: pot fi accesate numai din pachetul în care sunt
declarate
Dezavantaje:• Doar pentru grupuri pre-definiteDoar pentru grupuri pre definite• Drepturile de acces depind doar de cine (altă clasă) doreşte
accesul, nu de cum vor de fapt să folosească (e.g. doar 1 metodă)
38
metodă)
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Conceptul de interfaţăConceptul de interfaţăCo ceptu de te aţăCo ceptu de te aţăExistă diverse tipuri de interfeţe• Interfeţe utilizator• Interfeţe utilizator
– Nu doar pentru software: orice instrument– Adesea pot suferi modificări,
ât d tă i ă f difi ă icâteodată nu au voie să sufere modificări• API-uri: importante pentru programele ce le folosesc• Java interface: importante pentru clasele ce folosescJava interface: importante pentru clasele ce folosesc
alte clase prin intermediul lor
I t ţi t î t td iUser/ClientIntenţia este întotdeauna aceeaşi:
• Interfaţa defineşte şi restricţioneazăcum ajunge ceva să fie folosit
nt
Interfacej g
• Utilizatorii/clienţii execută operaţiinumai prin intermediul interfeţelorDacă implementarea internă se modifică
Implementation
39
• Dacă implementarea internă se modifică, utilizatorii/clienţii nu trebuie să sufere modificări
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Interfeţe JavaInterfeţe Java• Modificatorii de acces pot doar controla accesul în funcţie de
cine foloseşte o clasă/metodă/câmp
te eţe Ja ate eţe Ja a
ş p• Folosind interfeţe putem restricţiona accesul într-o manieră mai
flexibilă:O clasă poate implementa mai multe interfeţe– O clasă poate implementa mai multe interfeţe
– Putem folosi o altă interfaţă în funcţie de• Cine o foloseşte (cu altă clasă)
La ce este folosităClient
• La ce este folosită• Totuşi: adesea folosirea interfeţelor
vs. accesarea directă a unei clasă Class
1 2 3
reprezintă o decizie ce trebuie în prealabil cântărită
Programatorii au nevoie să ştie că ar trebui
Interface AInterface B
– Programatorii au nevoie să ştie că ar trebui să folosească interfeţe
– Programatorii au nevoie să ştie ce interfeţe ă f l ă
ImplementationClass
40
să folosească1 or 2 or 3 ?
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemple de interfeţeExemple de interfeţeExemple de interfeţeExemple de interfeţepublic class USSEnterpriseimplements Maintenance, SafeControl, FullControl {public void navigate(Point dest) { … }public void warpJump(Point dest) { … }public int checkSystems() { … }public void selfDestruct() { … }
}
i t f i t {interface Maintenance {public int checkSystems();
}
interface SafeControl extends Maintenance {public void navigate(Point dest);public void warpJump(Point dest);public void warpJump(Point dest);
}
interface FullControl extends SafeControl {
41
public void selfDestruct();}
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemple de interfeţeExemple de interfeţeExemple de interfeţeExemple de interfeţe
Maintenance e = new USSEnterprise();
Scotty accesând sistemul:
Acc sul p t fi Maintenance e = new USSEnterprise();int status = e.checkSystems();
Spock accesând sistemul:
Accesul poate fi restricţionat cu succes doar prin
d SafeControl e = new USSEnterprise();e.warpJump(new Point(103, 789));
Spock accesând sistemul: accesarea de interfeţe corespunzătoare.
e.selfDestruct(); Nu compilează!!!
Borg accesând sistemul:
p
USSEnterprise e = new USSEnterprise();e.selfDestruct(); // Boooom!
Borg accesând sistemul:
• Se alege o interfaţă corespunzătoare pentru accesarea unei clase• Accesarea directă a unei clase poate duce la dependenţe şi alte greşeli
42
• Accesarea directă a unei clase poate duce la dependenţe şi alte greşeli ce ar fi putut fi depistate de către compilator
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Forţarea folosirii interfeţelor Forţarea folosirii interfeţelor -- FactoriesFactorieso ţa ea o os te eţe oo ţa ea o os te eţe o acto esacto esprotected class USSEnterpriseimplements Maintenance, SafeControl, FullControl { protected USSEnterprise() {} … }
public class EnterpriseFactory {public static Maintenance getMaintenance() {public static Maintenance getMaintenance() {return (Maintenance) new USSEnterprise();
}public static FullControl getFullControl(String pw) {public static FullControl getFullControl(String pw) {if(pw.equals("please"))return (FullControl) new USSEnterprise();
else throw new RuntimeException("Alarm!!!");else throw new RuntimeException( Alarm!!! );}// similar for SafeControl
}
Maintenance e = EnterpriseFactory getMaintenance();
Accesul este acum permis numai prin intermediul interfeţelor:
}
43
Maintenance e = EnterpriseFactory.getMaintenance();int status = e.checkSystems();
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
SumarSumarSu aSu a• Modularitatea înseamnă că un sistem este compus
di ă ţi i d d t ( d l ) â d i t f ţdin părţi independente (module) având interfeţe bine-definite– Poate fi atinsă prin “separation of concerns”– Regulă: “low coupling, high cohesion”
• Ascunderea informaţiilor înseamnă că doar acele informaţii absolut necesare pentru a face ceva este pusă la dispoziţie– Accesul este posibil prin interfeţe bine-specificateţ– Detaliile interne de implementare sunt ascunse şi pot fi
modificate fără a afecta restul sistemului
44Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
QuizQuiz1. Ce avantaje oferă sistemele modulare?
QuizQuizj
2 D i d l l ă fi l b2. De ce avem nevoie ca modulele să fie slab cuplate?
3 Care este scopul folosirii interfeţelor?3. Care este scopul folosirii interfeţelor?
45Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Depanarea programelorDepanarea programelorDepanarea programelorDepanarea programelor
46Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Procesul de dProcesul de depanareepanareocesu de docesu de depa a eepa a e• Procesul de identificare şi corectare a erorilor software
– Folosită în principal pentru găsirea erorilor la run-time sau a rezultatelor incorecte produse de programe
• Erorile de runtime sunt mai greu de depistat decât erorile• Erorile de runtime sunt mai greu de depistat decât erorile de compilare– Compilatorul poate depista erorile mai repede (sintaxă incorectă,Compilatorul poate depista erorile mai repede (sintaxă incorectă,
apeluri incorect efectuate, etc.)
• Depanatoarele grafice sunt mai uşor de folosit (Eclipse, Visual Studio) decât cele din linia de comandă (gdb)
• În general se corectează o singură eroare la un moment dat şi fiecare modificare trebuie bine documentată (se poate folosi şi un VCS precum SVN)
47
poate folosi şi un VCS precum SVN)
Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
ProfilingProfilingo go g
• Profiling-ul reprezintă o formă de analiză g pdinamică a funcţionalităţilor oferite de execuţia programului care se concentreazăexecuţia programului care se concentrează pe aspecte măsurabile ale sistemului
48Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Funcţionalităţi ale unui ProfilerFuncţionalităţi ale unui Profileru cţ o a tăţ a e u u o eu cţ o a tăţ a e u u o e
• Un Profiler poate:– Măsura timpul necesar pentru rularea
aplicaţiei/părţi componente ale aplicaţiei– Furniza analize de utilizare– Prezenta istoria de execuţia a programuluiţ p g– Genera rapoarte privind utilizarea memoriei, a
instanţelor de obiecte, firelor de execuţie, etc.ţ , ţ ,
• Este bine când putem depista “bottleneck-Este bine când putem depista bottleneckurile” pentru a putea optimiza codul
49Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Tipuri de ProfilersTipuri de Profilers
• Memory profilers:
pu de o e spu de o e s
– Pentru analize ale memoriei native, memoriei colectate, stivei
• Thread profilers:– Detectarea condiţiilor de race deadlock-uriDetectarea condiţiilor de race, deadlock uri,
etc.• Code coverage profiles:• Code coverage profiles:
– Determinarea segmentelor de execuţie a programului având contexte specifice:programului având contexte specifice:
• Context: atunci când un utilizator se loghează în sistem care sunt metodele care ajung să fie s ste ca e su t etode e ca e aju g să eexecutate?
50Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemple: Profilere JavaExemple: Profilere Javae p e o e e Ja ae p e o e e Ja a
• Comerciale:– Profiler4J, JProfiler, JProbe, YourKit,
Introscope (JEE specific) - $$$ etcIntroscope (JEE specific) $$$, etc.
O• Open source:– NetBeans Profiler, Java Interactive Profiler,
Eclipse TPTP, etc.
51Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu: JProfilerExemplu: JProfilere p u J o ee p u J o e
52Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu: JProfilerExemplu: JProfilere p u J o ee p u J o e
53Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu: JProfilerExemplu: JProfilere p u J o ee p u J o e
54Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu: JProfilerExemplu: JProfilere p u J o ee p u J o e
55Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu: JProfilerExemplu: JProfilere p u J o ee p u J o e
56Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Depanarea folosind EclipseDepanarea folosind Eclipseepa a ea o os d c pseepa a ea o os d c pse
• Features:– Breakpoints
• Double-click pe marginea din stângaStep into execuţia instrucţiunii următoare– Step into – execuţia instrucţiunii următoare
• Din perspectiva Debug – F5– Step over – step into, cu salt peste execuţia uneiStep over step into, cu salt peste execuţia unei
metode• Din perspectiva
– Step return– Step Filters
W t h– Watches– Run to line
Suspend/Resume/Terminate
57
– Suspend/Resume/Terminate
Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Depanarea folosind EclipseDepanarea folosind Eclipseepa a ea o os d c pseepa a ea o os d c pse• Features:
B k i t– Breakpoints• Double-click pe marginea din stânga
– Step into – execuţia instrucţiunii următoare• Din perspectiva Debug – F5
– Step over – step into, cu salt peste execuţia unei metode• Din perspectiva Debug – F6Din perspectiva Debug F6
– Step return – execuţia instrucţiunilor rămase din metoda curentă• Din perspectiva Debug – F7
Step c Filters e ec ţia n mai a an mitor metode– Step cu Filters – execuţia numai a anumitor metode• Window > Preferences > Java > Debug > Step Filtering
– Watches – verificarea/modificarea valorilor variabilelor• Din perspectiva Debug fereastra “Variables”
– Run to line – setarea unui breakpoint temporar– Suspend/Resume/Terminate
58
Suspend/Resume/Terminate
Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Eclipse Java DebuggerEclipse Java Debuggerc pse Ja a ebuggec pse Ja a ebuggeLocal variables
Threads and stack
frames
Editor with breakpoint breakpoint
marks
l
59
Console I/O
59Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Integrated Development Integrated Development E i t (IDE )E i t (IDE )Environments (IDEs)Environments (IDEs)
Duct tape is like the Force.It has a light side, a dark side, d it h ld th i t thand it holds the universe together.
(Carl Zwanzig)
60Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Integrated Development Integrated Development Environments (IDEs)Environments (IDEs)
• IDE = workbench - un set coerent de instrumente CASE proiectat pentru a suporta activităţi software– Oracle Designer– Microsoft’s Visual Studio .NET– Eclipse
• Furnizează o interfaţă unică utilizatorului către mai multe instrumente CASEmulte instrumente CASE
• Common UI: toate instrumentele pot fi invocate din şi pot afişa rezultatele în acelaşi IDE
61
pot afişa rezultatele în acelaşi IDE
Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Integrated Development Integrated Development
• Extensibilitate: arhitecturi bazate pe plug in uri
EnvironmentsEnvironments• Extensibilitate: arhitecturi bazate pe plug-in-uri
– Plug-in: componentă program ce poate fi integrată (“plugged”) în sistem( plugged ) în sistem
– De obicei are propriile ferestre de comunicare• Un IDE furnizează de obicei resurse comuneUn IDE furnizează de obicei resurse comune
tuturor instrumentelor integrate (ex. acces la codul sursă, modele interne, …), , )
• Avantaje şi dezavantajeAvantaje şi dezavantaje– Integrează diverse instrumente ce asistă tot parcursul
procesului software– Fiecare IDE este diferit şi necesită învăţare şi cunoştinţe
62Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Integrarea instrumentelorIntegrarea instrumentelor• Workbenchurile integrează mai multe instrumente în
acelaşi UI
gg
– Editoare text– Compilatoare– Depanatoarea (execuţia & verificarea programului pas cu pas)p ( ţ p g p p )– Profilere (măsurarea & verificarea timpului petrecut în execuţia
unor secvenţe de cod)– Diverse alte editoare (e.g. pentru diagrame)( g p g )– Diverse alte instrumente (constructie, generearea/transformarea
codului, …)• Valoare dată de integrarea funcţionalăValoare dată de integrarea funcţională
Comunicaţie între instrumente, e.g.– Editor text cu senzitivitate la elementele constructive ale limbajului
(syntax sensitivity, auto-completion)(syntax sensitivity, auto completion)– Lista de erori de compilare cu navigare în codul sursă– Depanator integrat cu editorul text
• Extensibilitate: arhitectura de tip plug in şi interfaţa cu• Extensibilitate: arhitectura de tip plug-in şi interfaţa cu instrumente consolă
63Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Vederi multipleVederi multipleede u t p eede u t p e• IDE-urile furnizează un UI workspace conţinând câteva paneluri ce
prezintă diverse informaţii de interes pentru utilizatorTask ri diferite beneficia ă de ederei diferite as pra nor elemente• Task-uri diferite beneficiază de vederei diferite asupra unor elemente
• Idea: furnizarea aceleiaşi (sau măcar similare) informaţii în diferite paneluri (sincronizate), folosind diverse reprezentăriExemplu: lucrul cu un GUI• Exemplu: lucrul cu un GUI– Diagrama de clase arată relaţiile statice dintre controale– Ierarhia de conţinut prezintă structura la runtime a GUI-ului
Editorul vizual arată proiectul grafic (layout culori )– Editorul vizual arată proiectul grafic (layout, culori, …)– Codul cursă prezintă specificaţia comportamentului dinamic
b.addActionListener(new ActionListener() {void actionPerformed(ActionEvent e) {
System out println("Hello!");
64
System.out.println( Hello! );} });
Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Reprezentare structurată a codului sursăReprezentare structurată a codului sursăep e e ta e st uctu ată a codu u su săep e e ta e st uctu ată a codu u su să• Multe instrumente folosesc o reprezentare textuală a codului sursă
– Eliminarea detaliilor lexicale ne-necesare; predispuse la erori pentru că d i d d fi i (“ d”)depind de fiecare singur caracter (“untyped”)
– Lineare, deci greu de procesat (necesită folosirea unui parser) şi inflexibile• Idea: folosirea de reprezentări structurate, orientate spre tipuri de AST
pentru codul sursăpentru codul sursă• Multe IDE-uri moderne folosesc intern o astfel de abordare
– Codul sursă este parsat (adesea chiar în timp ce dezvoltatorul tastează) şi stocat ca un ASTstocat ca un AST
– AST-ul este folosit pentru navigaţie, editare, transformări, analize• Reprezentarea structurată permite adăugarea de noi funcţionalităţi
– Regăsire rapidă: căutare agregare– Regăsire rapidă: căutare, agregare– Editarea verificată (prevenţia inerentă a erorilor de sintaxă)
int x = 0;x++;
Var int0
=
Program
65
; x++
Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Integrated Development EnvironmentsIntegrated Development Environmentsgg
66Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Dezvoltare GUIDezvoltare GUI
67Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Dezvoltare grafică…Dezvoltare grafică…Dezvoltare grafică…Dezvoltare grafică…
Instrumente pentru dezvoltarea programelor – Curs 6 68
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
De ce prezentarea a două IDE?De ce prezentarea a două IDE?e ce p e e ta ea a douăe ce p e e ta ea a două• Alegerea unui IDE – probleme Personale/Religioase
– Unii oameni iubesc/urăsc Microsoft– Unii oameni iubesc/urăsc Java– Unii oameni iubesc/urăsc Eclipse/Visual Studio– Unii oameni iubesc/urăsc “open source”
• Dacă vorbim cu utilizatorii de Visual Studio:– Aveţi grijă la referirile la “Java” şi “Open Source”
• Java = încet, cu multe probleme• Open Source = bug-uri, fără suport
– Pentru ei Eclipse nu reprezintă centrul universului
• Propria experienţă contează– Clientul are întotdeauna dreptate
N ă f iţi ă l ţi ibil bl l d ţi i tâ i ă– Nu vă feriţi să semnalaţi posibile probleme pe care le vedeţi – mai târziu vă veţi mulţumi
– Nu vă feriţi de a vă arăta nelămuririle legate de o soluţie impusă - “Arată-mi cum fac asta în Visual Studio…”
69
– Întotdeauna veniţi cu propriile soluţii la probleme întâlnite, ceilalţi vor aprecia
Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Visual StudioVisual Studio
70Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Visual StudioVisual Studiosua Stud osua Stud o
• Scurtă istorie:– Visual Studio 97 (1997)– Visual Studio 6 (1998)– Visual Studio.NET (2002)Visual Studio.NET (2002)– Visual Studio.NET 2003– Visual Studio 2005– Visual Studio 2008Visual Studio 2008
71Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
(Câteva)(Câteva) CaracteristiciCaracteristici(Câteva) (Câteva) CaracteristiciCaracteristici
• Class Browser• Rich Debug Info
D kt I t ti• Desktop Integration• Scriptingp g• System Search• Flexible Projects
72Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
CaracteristiciCaracteristici• Class Browser
Ri h D b I f
Ca acte st cCa acte st c
• Rich Debug Info• Desktop Integrationp g• Scripting
S t S h• System Search• Flexible Projectse b e ojec s
73Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
CaracteristiciCaracteristiciCa acte st cCa acte st c
• Class Browser• Rich Debug Info
D kt I t ti• Desktop Integration• Scriptingp g• System Search• Flexible Projects
74Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
CaracteristiciCaracteristiciCa acte st cCa acte st c
• Class Browser• Rich Debug Info
D kt I t ti• Desktop Integration• Scriptingp g• System Search• Flexible Projects
75Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
EclipseEclipse
76Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
CaracteristiciCaracteristici• Platformă universală, open-source, ce integrează
diverse instrumente de dezvoltare a aplicaţiilor
Ca acte st cCa acte st c
diverse instrumente de dezvoltare a aplicaţiilor• Independenţă de limbajul de dezvoltare şi mediu de
operare– Diverse tipuri de conţinut– HTML, Java, C, JSP, EJB, XML, GIF, …
F ilit ă i t ă d di i t t• Facilitează integrarea uşoară de diverse instrumente– Instrumentele pot avea acces la diverse funcţii de bază ale
platformeiplatformei– Se pot adăuga noi instrumente la produsele deja instalate
• Comunitate mare de dezvoltatori– Include companii comerciale dezvoltatoare de software
(IBM leader)Se bazează pe popularitatea de care se bucură Java în– Se bazează pe popularitatea de care se bucură Java în rândul dezvoltatorilor de aplicaţii
77Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Elemente EclipseElemente Eclipsee e te c psee e te c pse• Workbench (Fereastra Eclipse) conţine paneluri
Edit ti ti l d fi i t fi dit t– Editoare: un tip particular de fişier poate fi editat– Vederi: furnizează reprezentări alternative şi ajută la navigare
O vedere se deschide cu Window -> Show View sau ca “Fastview”• Paneluri sunt grupate în areas (zone)
– Zonele pot fi minimizate/maximizateZonele pot fi suprapuse prin– Zonele pot fi suprapuse prindrag & drop asupra taburilor
– Panelele pot fi reordonate, mutate între t lâ ă kb hzone, ancorate lângă workbench
– Separatorii dintre zone pot fi mutaţi• Perspectivele sunt configuraţii particulare al workbench-uluiPerspectivele sunt configuraţii particulare al workbench ului
– Fiecare se ocupă de un anumit task– Schimbarea perspectivei:
S l ii i Wi d S P i A
78
– Salvarea noii perspective cu Window -> Save Perspective As…
Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Câteva Vederi EclipseCâteva Vederi EclipseCâte a ede c pseCâte a ede c pse• Navigator (foldere şi fişiere) şi Package Explorer (proiecte cu
pachete, fişiere, clase, metode, câmpuri)p , ş , , , p )– Iconurile indică tipuri şi stări (e.g. Accesibilitate, eroare)– Drag & drop:
mutarea claselor între pachete, fişiere între foldereu a ea c ase o e pac e e, ş e e e o de e– Double-click deschide resursa în editor– Right-click pe o resursă deschide un meniu de context cu operaţii
• Multe alte vederi: Console Outline Hierarchy Properties• Multe alte vederi: Console, Outline, Hierarchy, Properties, …
79Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Arhitectura (1)Arhitectura (1)tectu a ( )tectu a ( )
AnotherToolEclipse Platform
HelpWorkbench
JF
JavaDevelopment
Toolp
Team
JFace
SWT
Tools(JDT)
Your T l
Workspace
Tool
Plug-inDevelopment Debug
Their
Environment(PDE)
Platform Runtime
Eclipse Project
Their Tool
80Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Arhitectura (2)Arhitectura (2)tectu a ( )tectu a ( )
PDEPlug-in developmenti t
Java developmentt l
JDT
environment
PlatformEclipse Platform
tools
Java VMStandard Java2Virtual Machine
81Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Arhitectura bazată pe plugArhitectura bazată pe plug--inin--uriuri• Eclipse Platform Runtime este un micro-kernel
– Toate funcţionalităţile sunt oferite de plug-in-uri
tectu a ba ată pe p ugtectu a ba ată pe p ug uu
ţ ţ p g
• Eclipse Platform Runtime start up:– Descoperă plug-in-urile instalate local pe disc– Realizează corespundenţa extensii – puncte de extensie– Construieşte un registry global de plug-in-uri– Salvează local (cache) registry-ul
• Plug-in – cea mai mică unitate funcţională din Eclipse– Un exemplu mare: editor HTML– Cel mai mic exemplu: Acţiunea de creare a unui fişier zip
• Punct de extensie – entitate identificată prin nume folosită pentru colectarea de “contribuţii”
Exemplu: punct de extensie pentru colectarea preferinţelor asupra workbench ului– Exemplu: punct de extensie pentru colectarea preferinţelor asupra workbench-ului din UI
• Extensie - o contribuţie– Exemplu: preferinţe specifice ale editorului HTML
82Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Arhitectura bazată pe plugArhitectura bazată pe plug--inin--uriuritectu a ba ată pe p ugtectu a ba ată pe p ug uu
• Un plug-inp g– Contribuie la 1 sau mai multe puncte de
extensieextensie– Poate depinde de alte plug-in-uri (un plug-in
t i l i t API)poate inclusiv exporta un API)– Conţine biblioteci Java şi alte fişiereţ– Situat în propriul director de plug-in
83Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Componente EclipseComponente EclipseCo po e te c pseCo po e te c pse
• Platforma Eclipse reprezintă bazap p• Conţine câteva componente cheie
Eclipse Platform
Workbench
JFace“UI”
SWT Team Help Debug
Workspace Ant“Core”
84
Platform Runtime
Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Componenta workbenchComponenta workbenchCo po e ta o be cCo po e ta o be c• SWT (Standard Widget Toolkit) – Set generic de componente grafice
de nivel scăzut şi widget-uriButoane liste text meniuri tree uri text cu stil– Butoane, liste, text, meniuri, tree-uri, text cu stil...
– API independent de platformă– Foloseşte widget-uri native atunci când e posibilg
• JFace – task-uri de interacţiune UI– Registrii de imagini şi fonturi– Dialoguri, preferinţe– View-uri personalizate: adaptoare pentru widget-uri SWT de formă
arbore, tabele, liste, etc.– Infrastructura pentru widget-uri de formatare a textului– Gestiunea acţiunilor utilizatorilor
• Workbench personalitatea UI a Eclipse PlatformWorkbench
• Workbench – personalitatea UI a Eclipse Platform
SWTJFace
85Instrumente pentru dezvoltarea programelor – Curs 6
SWT
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
De ce SWT?De ce SWT?e ce Se ce S
Eclipse pe Windows XPEclipse pe Windows XP Eclipse pe Linux Eclipse pe Linux -- GTK 2.0GTK 2.0
Eclipse pe Linux Eclipse pe Linux -- MotifMotif Eclipse pe Mac OS X Eclipse pe Mac OS X -- CarbonCarbon
86Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Terminologia de lucru EclipseTerminologia de lucru Eclipsee o og a de uc u c psee o og a de uc u c pse
Menu barText
Tool bar
Perspectiveand
Texteditor
Fast Viewbar
Outlineview
ResourceNavigatorview
Propertiesview
Bookmarksview
S k d
Messagearea
EditorStatusarea
87
Stackedviews
Tasksview
area
Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Perspectiva JavaPerspectiva Javae spect a Ja ae spect a Ja a
Ierarhii de tip
M b ii Membrii selectaţi
88Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Perspectiva JavaPerspectiva Javae spect a Ja ae spect a Ja a
Rezultatele căutării sunt marcate în stânga
Toate lt t l rezultatele
unei căutări
89Instrumente pentru dezvoltarea programelor – Curs 6
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Editorul JavaEditorul Javad to u Ja ad to u Ja aHelp automat (Javadoc)
Lista de metodeDocumentaţia metodei
90Instrumente pentru dezvoltarea programelor – Curs 6