Module (14%)
Section (19%)

Стек - процедурный подход против объектно-ориентированного подхода

Процедурный стек готов. Конечно, есть некоторые слабые стороны, и реализация может быть улучшена многими способами (использование исключений для работы - хорошая идея), но в целом стек полностью реализован, и Вы можете использовать его, если хотите.

Но чем чаще Вы его используете, тем больше у Вас будет недостатков. Вот некоторые из них:

  • основная переменная (список стека) очень уязвима; любой может изменить его неконтролируемым образом, фактически разрушив стек; это не означает, что это было сделано злонамеренно - наоборот, это может произойти в результате небрежности, например, когда кто-то путает имена переменных; представьте, что Вы случайно написали что-то вроде этого:

    stack [0] = 0
    Функционирование стека будет полностью дезорганизовано;

  • может также случиться, что однажды Вам понадобится более одного стека; Вам придется создать еще один список для хранения стека и, возможно, другие функции push и pop;

  • может также случиться так, что Вам понадобятся не только функции pushиpop, но и некоторые другие средства; Вы, конечно, можете их реализовать, но попытайтесь представить, что произойдет, если у Вас будут десятки отдельно реализованных стеков.


Объектный подход обеспечивает решение для каждой из вышеуказанных проблем. Давайте сначала назовем их:

  • возможность скрывать (защищать) выбранные значения от несанкционированного доступа называется инкапсуляцией; к инкапсулированным значениям нельзя получить доступ или изменить их, если Вы хотите их использовать;

  • когда у Вас есть класс, реализующий все необходимое поведение стека, Вы можете создать столько стеков, сколько захотите; Вам не нужно копировать какую-либо часть кода;

  • возможность обогащать стек новыми функциями происходит от наследования; Вы можете создать новый класс (подкласс), который наследует все существующие черты от суперкласса, и добавляет некоторые новые.
The stack – procedural vs. object approach


Давайте теперь напишем совершенно новую реализацию стека с нуля. На этот раз мы будем использовать объектный подход, шаг за шагом ведя вас в мир объектного программирования.