Основные принципы ООП:
· Инкапсуляция (сокрытие реализации класса и отделение его внутреннего представления от внешнего).
· Наследование (отношение между классами, при котором один класс использует структуру или поведение другого (одиночное наследование) или других (множественное наследование) классов).
· Полиморфизм (положение теории типов, согласно которому имена (например, переменных) могут обозначать объекты разных (но имеющих общего родителя) классов).
Достоинства ООП:
· Упрощение разработки (разделение функциональности (чем больше и сложнее программная система, тем важнее становится разбить ее на небольшие, четко очерченные части. Чтобы справиться со сложностью, необходимо абстрагироваться от мелких деталей. Для этой цели классы представляют собой весьма удобный инструмент), локализация кода (данные и операции над ними вместе образуют определенную сущность, и они не разносятся по всей программе, как это нередко бывает в случае процедурного программирования, а описываются вместе. Локализация кода и данных улучшает наглядность и удобство сопровождения программного обеспечения), инкапсуляция (позволяет привнести свойство модульности, что облегчает распараллеливание выполнения задачи между несколькими исполнителями и обновление версий отдельных компонент)).
· Возможность создания расширяемых систем (обработка разнородных структур данных (программы могут работать, не различая вида объектов, что существенно упрощает код. Новые виды могут быть добавлены в любой момент.Это полиморфизм), изменение поведения на этапе выполнения (на этапе исполнения один объект может быть заменен другим, что позволяет легко без изменения кода адаптировать алгоритм, в зависимости от того, какой используется объект. Это полиморфизм), работа с наследниками (алгоритмы можно обобщить настолько, что они уже смогут работать более чем с одним видом объектов. Это полиморфизм)).
· Легкость модернизации с сохранением совместимости.
Недостатки ООП:
· Неэффективность на этапе выполнения (существует фактор, который влияет на время выполнения: это инкапсуляция данных. Рекомендуется не предоставлять прямой доступ к полям класса, а выполнять каждую операцию над данными через методы. Такая схема приводит к необходимости выполнения процедурного вызова при каждом доступе к данным).
· Неэффективность в смысле распределения памяти (динамическое связывание и проверка типа на этапе выполнения требуют по ходу работы информации о типе объекта. Такая информация хранится в дескрипторе типа, и он выделяется один на класс. Каждый объект имеет невидимый указатель на дескриптор типа для своего класса. Таким образом, в объектно-ориентированных программах требуемая дополнительная память выражается в одном указателе для объекта и в одном дескрипторе типа для класса).
· Излишняя избыточность (в библиотечном классе часто содержится больше методов, чем это реально необходимо. А поскольку лишние методы не могут быть удалены, то они становятся мертвым грузом. Это не воздействует на время выполнения, но влияет на возрастание размера кода).
· Психологическая сложность проектирования.
· Техническая сложность проектирования и документирования (документирование классов - задача более трудная, чем это было в случае процедур и модулей. Поскольку любой метод может быть переопределен, в документации должно говориться не только о том, что делает данный метод, но также и о том, в каком контексте он вызывается. Для абстрактных методов, которые пусты, в документации должно даже говориться о том, для каких целей предполагается использовать переопределяемый метод).
Классы и объекты
Всё сказанное далее будет относиться к JDK 1.4, пока не будет специально оговорено, что рассматривается JDK 1.5.
Программы на языке Java создаются из классов (classes). Используя объявление класса, можно построить любое число объектов (objects), или, как еще говорят, экземпляров класса. В ООП определены следующие ключевые свойства объектов:
· Поведение объекта (что с ним можно делать и какие методы к нему можно применять).
· Состояние объекта (как этот объект реагирует на применение методов).
· Сущность или уникальность объекта (чем данный объект отличается от других, характеризующихся таким же поведением и состоянием).
Все объекты, являющиеся экземплярами одного и того же класса, ведут себя одинаково и имеют одинаковый набор свойств. Поведение объекта определяется методами, которые можно вызвать. Каждый объект сохраняет информацию о своем состоянии. Со временем состояние объекта может измениться, но только в результате вызовов методов. Если состояние объекта изменилось вследствие иных причин, значит, принцип инкапсуляции не соблюден. Состояние объекта не полностью описывает его, так как каждый объект имеет свою собственную сущность. Индивидуальные объекты, представляющие собой экземпляры класса, всегда отличаются своей сущностью и обычно отличаются своим состоянием.
Все сущности в Java являются объектами, классами или интерфейсами. Ниже приведен пример простого класса, названного Body.
Пример 1.
class Body {
public long idNum;
public String name;
public Body orbits;
public static long nextId = 0;
}
В объявлении класса содержится ключевое слово class, за которым следует наименование класса и перечень его членов, заключенных в фигурные скобки. Объявление класса создает новый тип (type), так что ссылки на объекты этого типа могут выглядеть так:
Body mercury;
mercury – это переменная, способная хранить ссылку на объект типа Body. Выражение не создает объект, а только описывает ссылку, которая способна указывать на объект класса. На протяжении своего существования переменная mercury может ссылаться на множество различных объектов типа Body. Все эти объекты должны быть явным образом созданы.
Члены класса
Класс может содержать члены (members) трех основных категорий
· Поля (fields) – переменные, относящиеся к классу и его объектам и в совокупности определяющие состояние класса или конкретного объекта.
· Методы (methods) – именованные фрагменты исполняемого кода класса, обуславливающие особенности поведения объектов класса.
· Вложенные классы и вложенные интерфейсы – объявления классов или интерфейсов, размещенные в контексте объявлений других классов или интерфейсов.
Дата: 2019-02-19, просмотров: 240.