Markus Völter:
20
Grundkonzepte der Softwarearchitektur
Concepts
- Atomic
- Combinable
- Technology Neutral
- Describable Named
- (Patterns, Laws, Principles)
Modularize
Procedures, Classes, Components, Services,
Users Stories
Encapsulate
Private Members, Frameworks, Facade
Pattern, Components, Layers/Rings/Levels, Packed Data Wrapper
Contracts
Interfaces, Pre/Post Conditions, Protocol
State Machines, Message Exchange Patterns, Published APIs
Handle
Crosscuts
Aspect Orientation, Interceptors, Application
Servers, Exception Handling
Scaling things up
Bootstrapping
(erst Minimalsystem bauen, das nutzen,
um größeres zu bauen)
Languages, Compilers (z. B. gcc), IDEs
Standard Library
(kleiner Kern , z. B. Linux-Kernel,
plus Standardbibliotheken)
Lisp (Grow a language), Autosar Sys
Components, Microkernel OSs
Orthogonality
Closures, Program As Data, Macros, Higher-Order
Functions
Conceptualization
Formalize
Language, Contracts, Models, State Machines
Types & Instances
Programming Languages, (Hierarch.) Components,
Models & Metamodels, RDBMS/XML Schemas
Spezialize
Currying, Inheritance, State Machines
Notation
UML, Lisp, Java, Ruby,
Go Meta
Translators, Reflection, Meta Programming,
AOP
Translate
Compilers, Transformers, Generators,
Macros (Lisp, Converge, Boo)
Interpret
Business Process Engines, Data Driven
Systems, (Dynamic) Languages
Automate
Build, Test, Translate
Dos and Dont's
Protocols
Transactions, Locking/Synchronization,
Resource Access
Limit Freedom
Software Architecture, DSL: expressiveness,
MDSD: skeletons, Scade/SystemC
Declaration over Implementation
App Servers (EJB), Plugin RT (Eclipse),
Models, Transactional Mamory
Don't Overspecify
Test semantics, not syntax (code gen),
Higher Order Functions (map, foreach), Transactional Memory
Avoid Sideeffects
Functional Programming, Concurrency
(Sharing), Distribution