Все чаще, основным инструментом в творческом процессе создания становится компьютер. Живопись, музыка, стихи, архитектура - идеи зарождаются в умах, но планируются в машинах. По мере роста сложности реализации, возникает необходимость в новых инструментах, в результате чего вопрос о способе их разработки перекладывается на плечи программистов.
Разбираясь с основами ООП, для большего понимания материала, я обратился к литературе и ознакомился с книгой Брюса Эккеля «Философия java». В первой главе-введении, он дает простые определения основам, для дальнейшего манипулирования далее этими понятиями. Далее приведены вырезки из разделов главы.
Здесь возникает вопрос о понимании программистом того, что он должен сделать, ведь здесь происходит установление связи между моделью машины и моделью задачи, каждая из которых обладает своим набором свойств.
Основная задача ООП есть описание задачи в контексте самой задачи, а не в контексте компьютера, а исходят из этого, элементы пространства задачи и их представления в пространстве решения называются объекты.
Гради Буч предложил лаконичное и полное описание объекта:
Объект обладает состоянием, поведением и индивидуальностью.
Суть сказанного в том, что объект может иметь в своем распоряжении внутренние данные (которые есть состояние объекта), методы (которые определяют поведение) и уникальным адресом в памяти.
Объекты, идентичные во всем, кроме внутреннего состояния во время работы программы, группируются в классы объектов. Создание абстрактных типов данных есть фундаментальное понятие в ООП.
Абстрактные типы данных действуют почти так же, как и встроенные типы: можно создавать переменные типов (называемые объектами или экземплярами в терминах ООП) и манипулировать ими (посылать запрос).
Поскольку класс определяет набор объектов с идентичными характеристиками (элементы данных) и поведением (функциональность), класс на самом деле является типом данных, потому что, например, число с плавающей запятой тоже имеет ряд характеристик и особенностей поведения.
После определения нового класса вы можете создать любое количество объектов этого класса, а затем манипулировать ими так, как будто они представляют собой элементы решаемой задачи. Однако, трудностью в ООП является установление однозначного соответствия между объектами пространства задачи и объектами пространства решения.
Механизм передачи запроса к объекту, определяется его интерфейсом, в свою очередь, определяющийся его типом. Код, выполняющий запросы, наряду со скрытыми данными, составляет реализацию.
Источник: Философия Java. Брюс Эккель, 2009 год 4-ое издание.