Посвящаю всё это своей жене, Марии, без которой я бы не смог закончить книгу ещё лет тридцать.
Посвящаю всё это своей жене, Марии, без которой я бы не смог закончить книгу ещё лет тридцать.
Объектно-ориентированное программирование — это методология программирования, в которой все важные вещи представлены объектами, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.
Вы любите котиков? Надеюсь да, потому что я попытаюсь объяснить все эти вещи на примерах с котами.

Это UML-диаграмма класса. В книге будет много таких диаграмм.
Итак, у вас есть кот Пушистик. Он является объектом класса Кот. Все коты имеют одинаковый набор свойств — имя, пол, возраст, вес, цвет, любимая еда и прочее. Кроме того, они ведут себя похожим образом: бегают, дышат, спять, едят и мурчат.
Мурка, кошка вашей подруги, тоже является экземпляром класса Кот. Она имеет такой же набор поведений и свойств, что и Пушистик, а отличается от него лишь значениями этих свойств — она другого пола, имеет другой окрас, вес и т.д.

Объекты — это экземпляры классов.
Итак, класс — это своеобразный «чертёж», по которому строятся объекты — экземпляры этого класса.
Идём дальше. У вашего соседа есть собака Жучка. Как известно, и собаки, и коты имеют много общего — имя, пол, возраст, цвет есть не только у котов, но и у собак. Да и бегать, дышать, спать и есть могут не только коты. Получается, эти свойства и поведения присущи общему классу Животных.

UML-диаграмма иерархии классов. Все классы на этой диаграмме являются частью иерархии Животных.
Такой родительский класс принято называет суперклассом, а его потомков — подклассами. Подклассы наследуют свойства и поведения своего родителя, поэтому в них содержится лишь то, чего нет в суперклассе. Например, только коты могут мурчать, а собаки — лаять.
Мы можем пойти дальше, и выделить ещё более общий класс живых Организмов, который будет родительским и для Животных, и для Рыб. Такую «пирамиду» классов обычно называют иерархией. Класс Котов унаследует всё как из Животных, так из Оганизмов.

Классы на UML-диаграмме можно упрощать, если важно показать отношения между ними.
Следует упомянуть, что подклассы могут переопределять поведение методов, которые им достались от суперкласса. При этом, они могут как полностью заменить поведение метода, так и просто добавить что-то к результату выполнения родительского метода.