principles:model_principle
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
principles:model_principle [2018-12-08 11:08] – christian | principles:model_principle [2021-09-02 20:01] – old revision restored (2021-05-11 22:08) 65.21.179.175 | ||
---|---|---|---|
Line 25: | Line 25: | ||
Real world actions are then // | Real world actions are then // | ||
- | Be precise with semantics. An operation '' | + | FIXME more detailed description |
- | Keep sure that your software models the reality by invoking the method that has the correct semantics and supplying it with the parameters that are needed from a requirements perspective. | ||
===== Rationale ===== | ===== Rationale ===== | ||
Line 33: | Line 32: | ||
When the structures in the software roughly correspond to the structures of the problem domain, a developer doesn' | When the structures in the software roughly correspond to the structures of the problem domain, a developer doesn' | ||
- | Moreover if something works accidentally, | ||
- | In the example above supplying a '' | ||
===== Strategies ===== | ===== Strategies ===== | ||
Line 41: | Line 38: | ||
* Create methods corresponding to real-world actions | * Create methods corresponding to real-world actions | ||
* Map additionally necessary behavior to natural classes instead of creating artificial classes | * Map additionally necessary behavior to natural classes instead of creating artificial classes | ||
- | * For artificial behavior that cannot be mapped to a natural class at least create a metaphor or an artificial model (like a state machine) | + | * For artificial behavior that cannot be mapped to a natural class at least create a metaphor or an artificial model (like for example |
- | * Be precise with semantics. If you have an operation that currently does what you need but for slightly different reasons because it's an operation on the wrong abstraction level, create a new operation with the correct semantics. Have that new operation call the existing one as an implementation detail (e.g. have a '' | + | |
===== Caveats ===== | ===== Caveats ===== | ||
Line 56: | Line 53: | ||
> " | > " | ||
- | Although this view is disputed as a definition for object-oriented programming, | + | Although this view is disputed as a definition for object-oriented programming, |
===== Evidence ===== | ===== Evidence ===== | ||
Line 86: | Line 83: | ||
* **[[Tell, don't Ask/ | * **[[Tell, don't Ask/ | ||
* [[Low Coupling]] (LC): When designing a model for a software, it has to be borne in mind that structures with low coupling are desirable. | * [[Low Coupling]] (LC): When designing a model for a software, it has to be borne in mind that structures with low coupling are desirable. | ||
- | * [[Law of Leaky Abstractions]] (LLA): When building abstractions according to MP, keep in mind that there will most likely be abstraction leaks. A good abstraction minimizes those leaks. | + | |
==== Principle Collections ==== | ==== Principle Collections ==== | ||
Line 114: | Line 111: | ||
On the other hand our intuitive model of parsers and functions tells us that a '' | On the other hand our intuitive model of parsers and functions tells us that a '' | ||
- | |||
- | |||
- | ==== Example 4: Break and Air Conditioning ==== | ||
- | |||
- | Suppose a car has an air conditioning and a hill start assistant. The air conditioning needs to make sure that the engine provides enough power on sunny days. So it measures its power-consumption and pushes down the gas pedal just enough to the engine isn't stalled. The hill start assistant automatically releases the hand break if you start driving. Now the following situation can happen: A car waits in front of a boom barrier of an underground garage. It's a hot day and the driver opens the window to get the ticket. hot air flows into the car and the A/C powers up. The revolution speed is low because the car stands still so the A/C hits the gas pedal in order not to stall the engine. Now the hill start assistant realizes that the gas pedal was pressed and releases the hand break because pressing the gas pedal is the trigger that the diver want to drive away. As a result the car crashes into the boom barrier. | ||
- | |||
- | The problem here is with the A/C. Semantically it wanted to increase the motor power but actually it called an operation that hit the gas pedal. This is almost the same but not exactly the same. It's an operation on the wrong level of abstraction. If the A/C had called an operation '' | ||
Line 126: | Line 116: | ||
/* Choose one of the following and comment out the rest: */ | /* Choose one of the following and comment out the rest: */ | ||
/ | / | ||
- | /*[[wiki: | + | [[wiki: |
- | [[wiki: | + | /*[[wiki: |
Line 138: | Line 128: | ||
* [[http:// | * [[http:// | ||
- | ===== Discussion ===== | ||
- | |||
- | Discuss this wiki article and the principle on the corresponding [[talk: |
principles/model_principle.txt · Last modified: 2021-10-18 21:47 by christian