1/25
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced |
---|
No study sessions yet.
What are the two layers of software problems?
Wicked problems and tame problems
Where do wicked problems typically come from?
Domains outside computer science(biology, business, meteorology)
Example of wicked problem
Web commerce application
Open-ended, ill-defined, large, require much work
wicked problem
Where do tame problems typically occur?
Across various problem domains
Better defined, small, but can be complicated and difficult
tame problems
example of tame problems
Sorting and searching
What is the traditional approach people take a large, wicked problem?
A linear, top-down problem-solving approach, similar to the waterfall model
What is an alternative to the linear approach for solving wicked problems?
An opportunity-driven or opportunistic approach
The design must satisfy the requirement correctly within platform constraints
fitness of purpose
Related closely to modularity, this principle says you should separate out functional pieces of your design cleanly in order to facilitate ease of maintenance and simplicity. Modularity is good.
Separation of concerns
Keep your design simple as possible. This will let other understand what you’re up to. If you find a place that can be simplified, do it! if simplifying your design means adding more modules or classes to your design, that’s okay.
Simplicity
A simple, understandable design is amenable to change. The first kind change you’ll encounter is fixing errors, Errors occur at all phases of the development process: requirements, analysis, design, coding, and testing. The more coherent and easy to understand your design is, the easier it will be to isolate and fix errors.
Easy of maintenance
Modules are connected only through interfaces, not shared internal data, reducing maintenance and errors
loose coupling
The complement of loose coupling. Cohesion within a module is the degree to which the module is self-contained with regard both to the data it holds and the operation that act on the data.
High cohesion.
An outgrowth of simplicity and loose coupling is the ability to ass new features to the design easily.
Extensibility
Though not high on the list, keeping in mind that your software may need to be ported to another platform(or two or three) is a desirable characteristics.
Portability
Alan Davis and Richard Fairley call this intellectual distance. Its how far your design is from a real-world object. The heuristic here is to try to find a real-world objects that are close to things you want to model in your program.
Find real-world objects to model
Whether you’re doing object oriented design and you’re creating interface and abstract classes, or you’re doing a more traditional layered design, you want to use abstraction.
Abstraction is key
is the concept that you isolate information both data and behavior in your program so that you can isolate errors and isolate changes; you also only allow access to the information hiding.
Information hiding is your friend
Breaking your design up into semi-independent pieces has many advantages. It keep the design manageable in your head; you can just think about one part at a time and leave the other a black boxes.
Keep your design modular
If you make the assumption that there will be changes in your requirements, then there will likely be changes in your design as well. If you identify those areas of your design that are likely to change, you can separate them, this mitigating the impact of any changes you need to make.
Identify the parts of your design that are likely to change
Along with modularity, information hiding, change, using loose coupling will make your design easier to understand and to change as time goes along.
Use loose coupling, interfaces, and abstract classes
Robert Glass describes great software designers as having “ a large set of standard patterns” that they carry around with them and apply to their designs. This is what design experience is all about doing design over and over again and learning from experience
Use your knapsack full of common design patterns
Your design should adhere to the Principle of One Right Place; debugging and maintenance will be much easier
Adhere to the Principle of One Right Place
This type of visualization can settle the design in your head and can point out errors or possible complications in the design
Use diagrams as a designer languange