What does abstraction mean in programming?


I’m learning python and I’m not sure of understanding the following statement : “The function (including its name) can capture our mental chunking, or abstraction, of the problem.”

It’s the part that is in bold that I don’t understand the meaning in terms of programming. The quote comes from http://www.openbookproject.net/thinkcs/python/english3e/functions.html

How to think like a computer scientist, 3 edition.

Thank you !

Asked By: copper



As defined on wikipedia: Abstraction_(computer_science)

Abstraction tries to factor out details from a common pattern so that
programmers can work close to the level of human thought, leaving out
details which matter in practice, but are not exigent to the problem being

Basically it is removing the details of the problem. For example, to draw a square requires several steps, but I just want a function that draws a square.

Answered By: jpoehnelt

Let’s say you write a function which receives a bunch of text as parameter, then reads credentials in a config file, then connects to a SMTP server using those credentials and sends a mail using that text.

The function should be named sendMail(text), not parseTextReadCredentialsInFileConnectToSmtpThenSend(text) because it is more easy to represent what it does this way, to yourself and when presenting the API to coworkers or users… even though the 2nd name is more accurate, the first is a better abstraction.

Answered By: bedane

A great way to understand abstraction is through abstract classes.

Say we are writing a program which models a house. The house is going to have several different rooms, which we will represent as objects. We define a class for a Bathroom, Kitchen, Living Room, Dining Room, etc.

However, all of these are Rooms, and thus share several properties (# of doors/windows, square feet, etc.) BUT, a Room can never exist on it’s own…it’s always going to be some type of room.

It then makes sense to create an abstract class called Room, which will contain the properties all rooms share, and then have the classes of Kitchen, Living Room, etc, inherit the abstract class Room.

The concept of a room is abstract and only exists in our head, because any room that actually exists isn’t just a room; it’s a bedroom or a living room or a classroom.

We want our code to thus represent our “mental chunking”. It makes everything a lot neater and easier to deal with.

Answered By: dursk

The best way to to describe something is to use examples:

A function is nothing more than a series of commands to get stuff done. Basically you can organize a chunk of code that does a single thing. That single thing can get re-used over and over and over through your program.

Now that your function does this thing, you should name it so that it’s instantly identifiable as to what it does. Once you have named it you can re-use it all over the place by simply calling it’s name.

def bark():
  print "woof!"

Then to use that function you can just do something like:


What happens if we wanted this to bark 4 times? Well you could write bark(); 4 times.


Or you could modify your function to accept some type of input, to change how it works.

def bark(times):
    while i < times:
        i = i + 1
        print "woof"

Then we could just call it once:


When we start talking about Object Oriented Programming (OOP) abstraction means something different. You’ll discover that part later 🙂

Answered By: Steve

Abstraction is a core concept in all of computer science. Without abstraction, we would still be programming in machine code or worse not have computers in the first place. So IMHO that’s a really good question.

What is abstraction

Abstracting something means to give names to things, so that the name captures the core of what a function or a whole program does.

One example is given in the book you reference, where it says

Suppose we’re working with turtles, and a common operation we need is
to draw squares. “Draw a square” is an abstraction, or a mental chunk,
of a number of smaller steps. So let’s write a function to capture the
pattern of this “building block”:

Forget about the turtles for a moment and just think of drawing a square. If I tell you to draw a square (on paper), you immediately know what to do:

  • draw a square => draw a rectangle with all sides of the same length.

You can do this without further questions because you know by heart what a square is, without me telling you step by step. Here, the word square is the abstraction of "draw a rectangle with all sides of the same length".

Abstractions run deep

But wait, how do you know what a rectangle is? Well, that’s another abstraction for the following:

  • rectangle => draw two lines parallel to each other, of the same length, and then add another two parallel lines perpendicular to the other two lines, again of the same length but possibly of different length than the first two.

Of course it goes on and on – lines, parallel, perpendicular, connecting are all abstractions of well-known concepts.

Now, imagine each time you want a rectangle or a square to be drawn you have to give the full definition of a rectangle, or explain lines, parallel lines, perpendicular lines and connecting lines — it would take far too long to do so.

The real power of abstraction

That’s the first power of abstractions: they make talking and getting things done much easier.

The second power of abstractions comes from the nice property of composability: once you have defined abstractions, you can compose two or more abstractions to form a new, larger abstraction: say you are tired of drawing squares, but you really want to draw a house. Assume we have already defined the triangle, so then we can define:

  • house => draw a square with a triangle on top of it

Next, you want a village:

  • village => draw multiple houses next to each other

Oh wait, we want a city — and we have a new concept street:

  • city => draw many villages close to each other, fill empty spaces with more houses, but leave room for streets
  • street => (some definition of street)

and so on…

How does this all apply to programmming?

If in the course of planning your program (a process known as analysis and design), you find good abstractions to the problem you are trying to solve, your programs become shorter, hence easier to write and – maybe more importantly – easier to read. The way to do this is to try and grasp the major concepts that define your problems — as in the (simplified) example of drawing a house, this was squares and triangles, to draw a village it was houses.

In programming, we define abstractions as functions (and some other constructs like classes and modules, but let’s focus on functions for now). A function essentially names a set of single statements, so a function essentially is an abstraction — see the examples in your book for details.

The beauty of it all

In programming, abstractions can make or break productivity. That’s why often times, commonly used functions are collected into libraries which can be reused by others. This means you don’t have to worry about the details, you only need to understand how to use the ready-made abstractions. Obviously that should make things easier for you, so you can work faster and thus be more productive:


Imagine there is a graphics library called "nicepic" that contains pre-defined functions for all abstractions discussed above: rectangles, squares, triangles, house, village.

Say you want to create a program based on the above abstractions that paints a nice picture of a house, all you have to write is this:

import nicepic

So that’s just two lines of code to get something much more elaborate. Isn’t that just wonderful?

Answered By: miraculixx

Abstraction: is a very important concept both in hardware and software.

Importance: We the human can not remember all the things all the times. For example, if your friend speaks 30 random numbers quickly and asks you to add them all, it won’t be possible for you. Reason? You might not be able to keep all those numbers in mind. You might write those numbers on a paper even then you will be adding right most digits one by one ignoring the left digits at one time and then ignoring the right most digits at the other time having added the right most ones.

It shows that at one time we the human can focus at some particular issue while ignoring those which are already solved and moving focus towards what are left to be solved.

Ignoring less important thing and focusing the most important (for the time being and in particular context) is called Abstraction

Here is how abstraction works in programming.

Below is the world’s famous hello world program in C language:

//C hello world example hello.c
#include <stdio.h>

int main()
  printf("Hello worldn");
  return 0;

This is the simplest and usually the first computer program a programmer writes. When you compile and run this program on command prompt, the output may appear like this:

enter image description here

Here are the serious questions

  1. Computer only understands the binary code how was it able to run your English like code? You may say that you compiled the code to binary using compiler. Did you write compiler to make your program work? No. You needed not to. You installed GNU C compiler on your Linux system and just used it by giving command:

gcc -o hello hello.c

And it converted your English like C language code to binary code and you could run that code by giving command:


So, for writing an application in C program, you never need to know how C compiler converts C language code to binary code. So you used GCC compiler as an abstraction.

  1. Did you write code for main() and printf() functions? No. Both are already defined by someone else in C language. When we run a C program, it looks for main() function as starting point of program while printf() function prints output on computer screen and is already defined in stdio.h so we have to include it in program. If both the functions were not already written, we had to write them ourselves just to print two words and computers would be the most boring machines on earth ever. Here again you use abstraction i.e. you don’t need to know how printf prints text on monitor and all you need to know is how to give input to printf function so that it shows the desired output.

I did not expand the answer to abstraction of operating system, kernel, firmware and hardware for the sake of simplicity.

Things to remember:

While doing programming, you can use abstraction in a variety of ways to make your program simple and easy.

Example 1: You can use a constant to abstract value of PI 3.14159 in your program because PI is easy to remember than 3.14159 for the rest of program

Example 2: You can write a function which returns square of a given number and then anyone, including you, can use that function by giving it input as parameters and getting a return value from it.

Example 3: In an Object-oriented programming (OOP), like Java, you may define an object which encapsulates data and methods and you can use that object by invoking its methods.

Example 4: Many applications provide you API which you use to interact with that application. When you use API methods, you never need to know how they are implemented. So abstraction is there.

Through all the examples, you can realize the importance of abstraction and how it is implemented in programming. One key thing to remember is that abstraction is contextual i.e. keeps on changing as per context

Answered By: Bubba Yakoza

In a simple sentence, I can say: The essence of abstraction is to extract essential properties while omitting inessential details. But why should we omit inessential details? The key motivator is preventing the risk of change.

Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.