Стек - процедурный подход против объектно-ориентированного подхода
Процедурный стек готов. Конечно, есть некоторые слабые стороны, и реализация может быть улучшена многими способами (использование исключений для работы - хорошая идея), но в целом стек полностью реализован, и Вы можете использовать его, если хотите.
Но чем чаще Вы его используете, тем больше у Вас будет недостатков. Вот некоторые из них:
- основная переменная (список стека) очень уязвима; любой может изменить его неконтролируемым образом, фактически разрушив стек; это не означает, что это было сделано злонамеренно - наоборот, это может произойти в результате небрежности, например, когда кто-то путает имена переменных; представьте, что Вы случайно написали что-то вроде этого:
stack [0] = 0
Функционирование стека будет полностью дезорганизовано; - может также случиться, что однажды Вам понадобится более одного стека; Вам придется создать еще один список для хранения стека и, возможно, другие функции
push
иpop
; - может также случиться так, что Вам понадобятся не только функции
push
иpop
, но и некоторые другие средства; Вы, конечно, можете их реализовать, но попытайтесь представить, что произойдет, если у Вас будут десятки отдельно реализованных стеков.
Объектный подход обеспечивает решение для каждой из вышеуказанных проблем. Давайте сначала назовем их:
- возможность скрывать (защищать) выбранные значения от несанкционированного доступа называется инкапсуляцией; к инкапсулированным значениям нельзя получить доступ или изменить их, если Вы хотите их использовать;
- когда у Вас есть класс, реализующий все необходимое поведение стека, Вы можете создать столько стеков, сколько захотите; Вам не нужно копировать какую-либо часть кода;
- возможность обогащать стек новыми функциями происходит от наследования; Вы можете создать новый класс (подкласс), который наследует все существующие черты от суперкласса, и добавляет некоторые новые.
Давайте теперь напишем совершенно новую реализацию стека с нуля. На этот раз мы будем использовать объектный подход, шаг за шагом ведя вас в мир объектного программирования.