This is about thinking about how a problem can be solved
2 steps:
1) state the problem so that it can be solved with an algorithm
2) make an algorithm to solve it
Algorithm must be good, clean adn efficient though. Testing data and user feedback is also vital
"Abstraction is removing unnecessary details"
This is all about taking away information which isn't important eg:
If you're making a recipie for making a sandwich, you don't care about harvesting the wheat for the bread and making the dough yourself etc..
Example 2: we don't care about all the transistors or whatever here, we just care about what makes up a computer
Abstraction is also useful for programming languages so that the programmer can just focus on code rather than all the nitty gritty.
It's like, why don't we just always code in binary like sigmas? Unfortunately, you're a beta so you need a layer of abstraction to help you code
Exmaple 3 of Abstraction: EUlers bridges
You know the drill. Walk across all the bridges without crossing any of them more than once. Euler abstracted it more and more until it was easier to visualize
Representing the bridges as nodes and edges is a layer of abstraction.
Also the topology of a mug for some reason.
same thing, but with data.
eg: abstract datatypes like queues and stacks. you don't care about how it's stored in memory whatever, just that it is stored in some abstract way
You have input, some sorta computation, then output. Ez
but knowing exactly what kind of inputs and outputs is crucial for this
Dynamic Link Library (DLL) is an example of a program which reuses components.
These are libraries used in scripts for eg: rng, math functions, etc
this is thinkigng aghead but by the coputer
so it gives a small lil bitta temp space near or in the cpu for very quick temp storage
Procedural abstraction is carrying out a sequence of steps for some task.
These procedures could be like drawRect(0, 10, 50, 60) to draw a rectable for egs
this is also a procedure interference
again, we are just abstracting away innit
decomposition is breaking down a problem into smaller chunks
top down design is a way of breaking down a problem into major tasks, then broken down further into smaller subtasks
easier to test and write the program this way. self contained modules and well documented inputs and outputs
Hierarychy charts for represenging the strucure of a program. How modules relate