Abstraction is removing unnessesary detail ussually to solve a problem. Abstractionis key to high level languages like Python and Javascript. Graphs are also a form of abstraction and can help solve problem removing unnessesary details. Queues stacks and trees are also forms of abstraction.
In the case of abstracting a route from real life it can be represented more simply by removing things that aren't needed like how the road exactly moves. You just need to care when to go left and right.
In the case of a player avoiding being eaten by a monster, the way to abstract this is to consider that a shape (the player) is controlled by the user and needs to get to some location(the treasure) while not getting touched by another shape(the monster). The visualization can be created later.
A computational problem takes inputs and returns the solution as outputs. Precondition can be specified at the start to constrain the input. This is useful for the user so they can know what not to input. This helps avoid errors later and also helps the reuseablity and maintainablity of the code.
Cache can be used to store (partial) outputs or data. For example the instructions to a CPU are saved to temporary Cache and webpages can be cached in your browser.
The benefits of specifying inputs, Preconditions and outputs are reuseablity and readablity (knowing what needs to be inputs and what will be outputed helps the user and developer). This is especially important for subroutines in larger libraries for example numpy because users don't really know or care what happens inside the subroutine as long as the input and output is correct. This is also a form of abstraction.
Procedural abstraction means using a procedure to carry out a sequence of steps for achieving a task. The programmer doesn't need to know the detail of how the procedure works. The programmer only needs to know the format of the nessesary inputs and outputs (this is called the procedure interface).
Problem decomposition is breaking a big problem into many small problems. The advantage of decomposition is that it may be easier to solve and program and maintain. Top-down design is breaking down a problem into major tasks and then spliting these tasks further and repeat. A hierarchy chart is a tool to represent the structure of a program showing how modules relate to each other to form a complete solution.