You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
1.3 KiB
26 lines
1.3 KiB
Most common reasons for project failure: Poor requirements/planning/management
|
|
|
|
Most common *technical* reason for project failure: unmanaged complexity
|
|
|
|
Abstraction: from the outside, we view an object or function as a coherent idea on a high level of detail
|
|
|
|
Information hiding / encapsulation: from the outside, internal implementation details are not viewable
|
|
|
|
Loose coupling:
|
|
* Size (prefer fewer methods and parameters)
|
|
* Visibility (e.g. avoid sneaking info between objects through a global variable)
|
|
* Flexibility (objects and functions can be rearanged with relative ease)
|
|
Example: Passing primitives is looser coupling than passing complex objects
|
|
Avoid: some object/function requires knowledge of *internal* workings of another object/function.
|
|
|
|
High cohesion: Methods and data in a class are highly related and belong together
|
|
|
|
All of this (abstraction, information hiding, loose coupling, high cohesion) mainly comes down to two motivations:
|
|
Limit the amount of complexity we deal with at a time
|
|
Limit the effects when a change is made to the code
|
|
This reduces the cognitive load required to understand any given part of the system at a time.
|
|
|
|
|
|
|
|
[The CouplingVsCohesion.svg image is public domain, obtained from https://upload.wikimedia.org/wikipedia/commons/0/09/CouplingVsCohesion.svg]
|