about “Software Architecture and Design”
what it is, what it isn’t
giving a basic idea about the terms
detailed comments and annotations for each slide can be found here: https://docs.google.com/presentation/d/1U8zNQ5YQ2562yQzotVQ5cLxsPKu44lD3_L9jdSPKk4g/edit?usp=sharing
19. Architecture vs. Design - Examples
● What kind of data
storage?
● How do modules
interact with each
other?
● What recovery
systems are in
place?
● What are the
responsibilities of
module X?
● What are the
functions of class
Y?
● What can a class
do, and what not?
20. Architecture vs. Design - Conclusion
● hairsplitting → don’t bother
● all are ambiguous → attach “Software”
ModelArchitecture
Design
23. Use: Communication (1)
var __extends = this.__extends ||
function (d, b) {
for (var p in b) if
(b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor =
d; }
__.prototype = b.prototype;
d.prototype = new __();
};
27. Use: Documentation (1)
/** ===========================
* This class uses class B
* It also uses class C
* It extends class D, through
* which it is used by class E
* ===========================
*/
33. Aspects: Structure of A ‘n’ D
Patterns
Frameworks,
Libraries,
Technologies
Common
Sense,
EXP
Principles
Your Application Anti-Pattern
Best
Practices
34. Aspects: A ‘n’ D
Philosophy
Legals
Processes
&
Workflows
… ?
Requirements
Standards
Social
Notations
Tools
36. Reuse & Licence
● You may reuse & change it non-commercially.
● You have to contact and inform me about any
changes or re-publications.
● The “Oliver Stadie” and “Reuse & Licence”
pages have to remain unchanged.
● Anything else is like in this creative commons:
Software Architecture and Design - An Overview
by Oliver Stadie is licensed under a Creative
Commons Attribution-NonCommercial-ShareAlike
4.0 International License.
Notas do Editor
about “Software Architecture and Design”
what it is, what it isn’t
giving a basic idea about the terms
Generalist -> passion for AnD, since it’s the intersections of all technologies
Currently Finishing my studies in informatics
Freelancer
responsibility separation: Request - Response
TCP/IP alias internet protocol suite
stack layers and restrict communication channels
Split a system into 3 main components.
What the user sees
What is done (activities)
What is stored
restrict the instances of a class to one
by far the most popular pattern on SO
often used badly
I used best rated answers from stackoverflow, to present a “common opinion”
Architecture:
design of the entire system
skeleton
highest level of abstraction
Design:
design individual module / component / class
can be directly translated to programming language, unlike architecture.
Overall:
different diagram types
Differentiation by question type.
Example Questions use these words anyway!
“How” could be reformulated to “What Protocol”.
Can’t reformulate “What”.
Model can be confused with M in MVC
Design can be confused with Graphic Design etc.
Architecture can be confused with Building Architecture.
Just say “Software Architecture”, “Software Design” or “software Modelling”
What are the use cases and applications of AnD?
What are the benefits of AnD?
CASE == Computer aided software engineering
fast vs. digital
disposable vs. reusable
It can be hard to understand software details
AnD provides an own language
only few people speak it
AnD provides mechanisms to plan SW before expensively implementing it.
E.g. as everybody knows, it’s hard to build a Dalek without proper planning.
AnD helps understand problems and software
simplification & information hiding: focus on interesting aspects.
easy trial-and-error: it’s much easier and quicker to slightly change a diagram, than 100 LOCs
AnD can be used to document code and SW.
classical code documentation can be bulky ...
… while diagrams can supplement documentation in a cleaner way.
generate working SW or code snippets from model
may save a lot of work
Requires CASE instead of sketches
generate accurate models from code
help understand, communicate and plan again
It’s easy to equip one soldier but thousands need additional coordination.
Same is true for Software: 1 Library vs. 100; 100 LOC vs. 1.000.000
Two issues: Clean & Scaling
Scaling: minimize additional coordination
Clean: ease work (understanding, time, etc.)
What are the subtopics of AnD?
principles: SOLID
patterns: GoF
frameworks & libraries: often enforce a certain design
technologies: have to be considered when designing
common sense, exp: most of all intuition. Very important point, since there is no right or wrong.
application: the thing you want to build.
anti-pattern: examples of how you shouldn’t do it.
best practices: examples of how to do it.
legals: are there patents for AnD?
Philosophy: How important is AnD?
Notations: How to draw our ideas? -> UML
Processes & Workflows: remember waterfall and agile
Standards: UML, common sense
Tools: CASE, MDD, etc.
Social: Had good intuition 5 years ago, but nobody listened. Learned buzzwords and anti-patterns. Now bosses are impressed and listen.
something I forgot?