Software Architectures
Curs avansat predat în limba engleză, prezentat aici în română pentru a fi integrat în ansamblul activității mele didactice. În suportul de curs apare și sub titlul Software Architectures. El este consacrat arhitecturii sistemelor software complexe, privite la scară mare: distribuție, middleware, componente, stiluri și pattern-uri arhitecturale, aplicații enterprise și arhitecturi orientate pe servicii.
Repere
- Instituție: Universitatea POLITEHNICA din București
- Facultate: FILS – Facultatea de Inginerie în Limbi Străine
- Limba de predare: engleză
- Program: master de Software Engineering
- An / semestru: anul II, semestrul I
- Titlu oficial: Software Architecture
- Titlu în suportul de curs: Software Architectures
- Titular curs: Luca Dan Șerbănați
- Structură: 3 ore curs + 2 ore laborator
- Evaluare: examen final
- Credite: 5
- Precondiții: Software Development Methods, modelare UML, experiență serioasă de programare în Java sau C++
Locul cursului în activitatea mea didactică
Acest curs reprezintă punctul de maturitate al secvenței mele didactice dedicate ingineriei software. Dacă în alte cursuri accentul cădea pe proces, analiză și proiectare orientată pe obiecte, aici interesul se mută asupra deciziilor structurale majore: cum este împărțit sistemul în componente, cum comunică acestea, cum se susțin proprietățile de scalabilitate, integrare, toleranță la defecte și evoluție, și ce mecanisme middleware sunt necesare pentru sisteme distribuite reale.
Este, prin excelență, un curs despre software privit la scară mare. Nu mai este vorba doar despre clase și colaborări locale, ci despre arhitectură ca ansamblu de decizii greu de schimbat ulterior și despre infrastructura conceptuală și tehnologică necesară sistemelor enterprise și distribuite.
Obiectivul cursului
Obiectivul general al cursului este formarea unei înțelegeri temeinice asupra arhitecturii software: ce este ea, cum se raportează la analiza și proiectarea detaliată, ce stiluri și pattern-uri o structurează și cum poate fi folosită pentru a construi sisteme robuste, întreținabile, extensibile și integrabile.
În această perspectivă, arhitectura apare ca nivelul la care sunt tratate explicit distribuția, concurența, persistența, comunicarea la distanță, containerele de componente, serverele de aplicații, interoperabilitatea și arhitecturile orientate pe servicii.
Structura cursului
1. Introducere în software design și în rolul arhitecturii
Suportul începe printr-o recapitulare a noțiunilor fundamentale de proiectare software: ciclul de viață, forward și reverse engineering, rolul modelelor în dezvoltare, procesul iterativ și incremental, relația dintre analiză și proiectare și diferența dintre architectural design și object design.
În acest context sunt discutate și complexitatea software-ului, proiectarea ca management al constrângerilor, principiile de proiectare (SOLID, DRY, KISS, separation of concerns), precum și ideea de model-driven design.
2. Arhitectura software ca nivel distinct al proiectării
O secțiune importantă clarifică poziția arhitecturii în cadrul nivelurilor de proiectare: enterprise-wide architecture, stiluri arhitecturale ale aplicațiilor, pattern-uri arhitecturale și pattern-uri de design. Arhitectura este prezentată ca locul în care se decide distribuția responsabilităților între componente și tehnologii și se fixează contextul în care proiectarea de nivel inferior va putea avea loc.
3. Stiluri, pattern-uri și arhitecturi specifice de domeniu
Cursul distinge între architectural styles, architectural patterns și domain-specific software architectures. Stilurile definesc vocabularul componentelor și conectorilor și modul lor de combinare, în timp ce pattern-urile arhitecturale oferă soluții recurente pentru probleme arhitecturale bine cunoscute. În paralel, arhitecturile specifice de domeniu sunt prezentate ca forme avansate de reutilizare a cunoașterii inginerești.
4. Sisteme distribuite
Un bloc major al cursului este dedicat sistemelor distribuite. Sunt discutate caracteristicile lor fundamentale, transparențele pe care trebuie să le realizeze și dificultățile introduse de distribuție. Distribuția este tratată împreună cu concurența și persistența, ca una dintre dimensiunile conceptuale centrale ale calculului distribuit.
Se insistă asupra faptului că infrastructura de comunicare este problema centrală în proiectarea sistemelor distribuite și că transparența de acces, localizare, migrare, replicare, concurență, performanță și scalabilitate nu este dată, ci trebuie construită prin mijloace arhitecturale adecvate.
5. Middleware pentru comunicare la distanță
O parte consistentă a cursului este dedicată middleware-ului. Sunt discutate serviciile necesare calculului distribuit — naming, security, transaction, persistence, event și message queuing — și apoi marile familii de middleware pentru comunicație la distanță: RPC-based middleware, ORB-based middleware și Message-Oriented Middleware.
În această zonă apar explicit comunicația cu obiecte remote, Java RMI, rolul stub-urilor și al skeleton-urilor, registrul RMI, precum și componenta CORBA.
6. Arhitecturi pe componente și component middleware
Cursul acordă un loc important arhitecturilor bazate pe componente. Sunt prezentate ideile de componentă, container, contract între componente și container, componente CORBA cu porturi de tip facets, receptacles, event sources, event sinks și atribute configurabile.
Accentul cade pe modifiabilitate și integrabilitate: componentele sunt tratate ca entități slab cuplate, cu interfețe bine definite, ușor de înlocuit și integrat într-un sistem mai larg.
7. Application servers și Jakarta EE / EJB
O altă secțiune solidă este dedicată application server-elor ca formă avansată de middleware. Sunt discutate runtime environment-ul, serviciile oferite de serverele de aplicații, component model-ul, scalabilitatea, load balancing, fault tolerance, securitatea și capabilitățile de integrare.
În această parte apar explicit Jakarta EE, containerele sale (Enterprise Bean container, Web container, Application Client container), precum și Enterprise Java Beans ca model server-side pentru încapsularea logicii de business. Sunt prezentate și instrumente de lucru asociate Eclipse GlassFish Server.
8. Design patterns ca fundament arhitectural
Deși miza principală a cursului este arhitectura, suportul include și o reluare amplă a design pattern-urilor, tratate ca bază conceptuală pentru soluțiile arhitecturale. Sunt discutate principiile de atribuire a responsabilităților, pattern-urile fundamentale, creationale, structurale și comportamentale.
În acest mod, cursul sugerează limpede continuitatea dintre deciziile locale de design și organizarea arhitecturală de ansamblu.
9. Service-Oriented Architecture
O parte amplă este consacrată arhitecturilor orientate pe servicii. Sunt prezentate straturile unei SOA, rolul gateway-urilor, al stratului de normalizare tehnologică și de date, stratul de compunere a proceselor, precum și problema tranzacțiilor în astfel de arhitecturi.
Sunt discutate ESB-ul, orchestrarea și coregrafia serviciilor web, Service Locator, Service Façade și Virtual Provider ca pattern-uri de integrare și de acces la servicii.
10. Web services, integrare și API economy
În partea finală, cursul privește evoluția soluțiilor de integrare: de la EAI și SOA către web APIs și API management. Sunt discutate relația dintre SOA și web APIs, evoluția soluțiilor bazate pe ESB, apariția gateway-urilor, expunerea API-urilor în afara întreprinderii și trecerea către API Economy și microservices.
Această parte conferă cursului o deschidere foarte actuală, arătând cum principiile serviciilor și integrării se prelungesc natural în noile arhitecturi orientate pe API-uri și pe sisteme agile de mare distribuție.
Laborator și teme
Componenta practică urmărea aplicarea ideilor arhitecturale în contexte Java enterprise și distribuite. În pagină exista deja accentul pe Java Beans, NetBeans, Eclipse și pe componenta de laborator, iar suportul recuperat confirmă explicit prezența tehnologiilor Jakarta EE / EJB, a containerelelor, a serverelor de aplicații și a instrumentelor GlassFish.
Din punct de vedere didactic, aceasta arată că nu era un curs pur teoretic, ci unul care punea în relație conceptele arhitecturale cu infrastructura tehnologică efectivă necesară aplicațiilor enterprise și distribuite.
Evaluare
Evaluarea se baza pe activitatea din semestru și pe examenul final. Din perspectiva conținutului, era esențială nu doar memorarea unor stiluri sau pattern-uri, ci capacitatea de a înțelege cum se aleg structurile arhitecturale, cum se justifică folosirea middleware-ului și cum se proiectează un sistem coerent, distribuit și integrabil.
Bibliografie de bază
- M. Shaw, D. Garlan, Software Architecture: Perspectives on an Emerging Discipline, Prentice Hall, 1996.
- F. Buschmann et al., Pattern-Oriented Software Architecture, Wiley, 1996.
- E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns, Addison-Wesley, 1995.
- M. Fowler et al., Patterns of Enterprise Application Architecture, Addison-Wesley, 2002.
- G. Hohpe, B. Woolf, Enterprise Integration Patterns, Addison-Wesley, 2004.
- P. Kuchana, Software Architecture Design Patterns in Java, Auerbach, 2004.
Semnificația cursului
Privit retrospectiv, acest curs exprimă foarte bine o idee care m-a preocupat constant: software-ul mare nu poate fi înțeles și construit doar la nivelul codului. El cere modele, stiluri, pattern-uri, componente, middleware, servere de aplicații și mecanisme de integrare care să susțină funcționarea întregului sistem.
De aceea, Software Architecture nu este doar un curs despre arhitecturi cunoscute sau despre tehnologii distribuite. Este un curs despre judecata inginerească necesară pentru a organiza complexitatea, pentru a integra subsisteme eterogene și pentru a transforma un ansamblu tehnologic dispersat într-un sistem coerent, robust și evolutiv.





