User Tools

Site Tools


principles:model_principle

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
principles:model_principle [2018-12-08 10:43]
christian [Description Status]
principles:model_principle [2018-12-08 11:54]
christian example 5
Line 114: Line 114:
  
 On the other hand our intuitive model of parsers and functions tells us that a ''​Function''​ does not need a ''​Parser''​ to be a meaningful entity. One can easily think of ''​Function''​s created by using builder functions instead of a parser. And even if that wasn't true and there would only be the possibility to create functions by using parsers, a ''​Function''​ object logically can work without knowing that there are parsers which have created it. In an imaginary hierarchy of modules Parser would be a module on a higher scale than ''​Function''​. So MP forbids that ''​Function''​ depends on ''​Parser''​. On the other hand our intuitive model of parsers and functions tells us that a ''​Function''​ does not need a ''​Parser''​ to be a meaningful entity. One can easily think of ''​Function''​s created by using builder functions instead of a parser. And even if that wasn't true and there would only be the possibility to create functions by using parsers, a ''​Function''​ object logically can work without knowing that there are parsers which have created it. In an imaginary hierarchy of modules Parser would be a module on a higher scale than ''​Function''​. So MP forbids that ''​Function''​ depends on ''​Parser''​.
 +
 +
 +==== 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 ''​increaseMotorPower''​ instead of an operation ''​hitGasPedal''​ the problem would have been prevented. ​
 +
 +
 +==== Example 5: Inferring Information ====
 +
 +Suppose there is a smartphone app and its backend. The app lets you buy several products. One day the app developers demand that the backend adds a field describing the product size (small, medium, large). The backend developers add the field and everyone is happy. The app developers use this field so they can decide whether gift wrapping is available (large products cannot be gift-wrapped). Half a year later the company decides to enhance their product portfolio by reselling products of company B. The backend will redirect orders of B-products directly to company B so they are in charge of delivery. ​
 +
 +Unfortunately B is not able to provide gift-wrappings at all. So the smartphone app has to be changed such that it not only removes the gift-wrapping option for large products but also for B-products. But smartphone apps need to be updated by the customer (and some of them never do). So the only way to ensure that gift-wrapping is handled correctly even if the customer hasn't updated yet, is that the backend returns ''​size:​large''​ for every B product (even for small ones). ​
 +
 +The ''​size''​ field gets deprecated and a new field ''​giftWrappingAvailable''​ is added. In fact that's what they should have done in the first place. The app developers needed to know if gift wrapping is available. But instead they inferred this information based on the size. This worked but it worked accidentally---and it broke accidentally. ​
  
  
principles/model_principle.txt · Last modified: 2018-12-08 11:54 by christian