This document discusses fundamental concepts of software architecture, including:
- Breaking systems down into modular components through techniques like encapsulation, contracts, and decoupling.
- Scaling systems up through parametrization, simplicity, decentralization, and standard libraries.
- Conceptualizing at a higher level of abstraction using techniques like abstraction, hierarchical decomposition, specialization, formalization, and viewpoints.
- Best practices like making dependencies and transformations explicit, limiting freedom to avoid side effects, and testing semantics rather than syntax.
61. More I Ownership vs. Reference BuildLanguages CohesionandCoupling (do onethingright, composability) Indirection (polymorphism, memreferencesforcompaction, namingservice) Prevention vs. Compensation
62. More II BuildPlatforms Versioning Pessimistic/Optimistic/Compensating Localize (Sync in MP, UML-M2M) Container (AppServer) Lazy/On-demand, Eager SelfModification (MetaProg, MOPs, Embedded Optimization Measure: metrics, performance tuning, scalability, test coverage
63. What do youthink? More Fundamentals? More Examples? Pleaseletmeknow! voelter@acm.org