Абстракция является основной концепцией во всех компьютерных науках. Без абстракции мы все равно будем программировать в машинный код или, хуже того, не иметь компьютеров в первую очередь. Так что ИМХО, это действительно хороший вопрос.
Что абстракцию
Абстрагируясь что-то значит для дать имена к вещам, так что название отражает суть того, что делает функция или целая программа.
Один из примеров в книге вы ссылаетесь, где он говорит
Предположим, что мы работаем с черепахами, и обычная операция нам нужна рисовать квадраты. «Рисовать квадрат» - это абстракция или ментальный кусок, нескольких небольших шагов. Итак, давайте напишем функцию, чтобы захватить образец этого «строительного блока»:
Забудьте о черепах на мгновение и просто думать о рисуя квадрат. Если я скажу вам нарисовать квадрат (на бумаге), вы сразу же знаете, что делать:
- нарисовать квадрат =>нарисовать прямоугольник со всеми сторонами одной и той же длины.
Вы можете сделать это без дальнейших вопросов, потому что вы знаете наизусть то, что площади есть без меня говорить вам шаг за шагом.Здесь слово square is абстракция «нарисовать прямоугольник со всеми сторонами одной длины».
Абстракции глубоки
Но ждать, как вы знаете, что прямоугольник это? Ну, это еще одна абстракция для следующих целей:
- прямоугольник => нарисуйте две линии, параллельные друг другу, такой же длины, а затем добавить еще две параллельные линии, перпендикулярной к двум другим линиям, опять-таки из такой же длины, но, возможно, разной длины, чем первые два.
Конечно, это идет дальше и дальше - линии, параллельно, перпендикулярных, подключения все абстракциями хорошо известных понятий.
Теперь представьте, что каждый раз, когда вам нужен прямоугольник или квадрат, который нужно нарисовать, вы должны дать полное определение прямоугольника или объяснить линии, параллельные линии, перпендикулярные линии и соединительные линии - это займет слишком много времени для этого.
Реальная сила абстракции
Это первая сила абстракций: они делают говорить и получать вещи сделать гораздо проще.
Вторая сила абстракций происходит от хорошей собственности компонуемости: как только вы определили абстракции, вы можете составить два или более абстракции, чтобы сформировать новые, более крупные абстракции: говорят, что вы устали от рисования квадратов, но вы действительно хотите нарисовать дом.Предположим, что мы уже определили треугольник, поэтому мы можем определить:
- дом => нарисовать квадрат с треугольника на нем
Далее вы хотите деревню:
- деревня => нарисовать несколько ДОМОВ рядом друг с другим
Ой, подождите, мы хотим, чтобы город - и у нас есть новая концепция улица:
- город => рисовать много деревни близко друг к другу, заполнить пустые места более дома, но оставить пометка для улицы
- улица => (какое-то определение улицы)
и так далее ...
Как все это применить к programmming?
Если в процессе планирования вашей программы (процесс, известный как анализа и проектирование) вы найдете хорошие абстракции к проблеме, которую вы пытаетесь решить, ваши программы становятся короче, а значит проще писать и - может быть, что более важно - легче читать. Способ сделать это, чтобы попытаться понять основные концепции, которые определяют ваши проблемы - как в (упрощенном) примере рисования дома, это квадратов и треугольники, чтобы нарисовать села его был объектов недвижимости:.
В программировании мы определяем абстракции как функции (и некоторые другие конструкции, такие как классы и модули, но давайте теперь сосредоточимся на функциях). Функция по существу имен набор одиночных утверждений, поэтому функция по сути является абстракцией - подробности см. В примерах в вашей книге.
Красота этого все
В программировании, абстракций может сделать перерыв или производительности. Вот почему часто время, обычно используемые функции собираются в библиотеки , которые могут быть использованы другими пользователями. Это означает, что вам не нужно беспокоиться о деталях, вам нужно только понять, как использовать готовые абстракции.Очевидно, что должно сделать вещи проще для вас, так что вы можете работать быстрее и, таким образом, быть более продуктивным:
Пример:
Представьте, что графическая библиотека называется «nicepic», который содержит предварительно определенные функции для всех абстракции, рассмотренные выше: прямоугольники, квадраты, треугольники, дом, деревня.
Допустим, вы хотите создать программу, основанную на вышеуказанных абстракций, который рисует красивую картину дома, все, что вы должны написать это:
import nicepic
draw_house()
Так что это всего лишь две строки кода, чтобы получить что-то гораздо более сложной. Разве это не замечательно?
Надеюсь, это поможет.
Использование/значение абстракции слова в вашем примере одинаково в мире программирования или вне его. – Lix
Простой: если вы видите вызов функции в вашем коде, скажите 'calculateFooBar (x, y)', вы знаете (или, по крайней мере, имеете какую-то идею), что делает этот (возможно, сложный) код, не заботясь о чтении и понимании весь код, реализующий эту функцию. –