Московский государственный индустриальный университет
Опубликован: 27.09.2006 | Доступ: свободный | Студентов: 3332 / 380 | Оценка: 4.17 / 3.79 | Длительность: 24:17:00
Специальности: Программист
Лекция 10:

Основы объектно-ориентированного программирования

Аннотация: Применение ООП к разработке программных проектов. Основные концепции ООП. Классы и объекты и их свойства в языке Java. Контейнеры и их реализация на базе вектора. Словарик ООП.
Ключевые слова: Java, ПО, директивное программирование, вывод, интеллект, опыт, ООП, объектно-ориентированное программирование, методология программирования, объект, тип, пересылка сообщений, класс, иерархия наследования, абстракция, взаимодействие, сообщение, экземпляр, абстрагирование, метод решения, логический, интерфейс объекта, интерфейс, реализация, инкапсуляция, информация, наследование, доступ, полиморфизм, синоним, Pascal, CLOS, объявление переменной, расстояние, метод, аргумент, конструктор, координаты, компилятор, метод класса, указатель, ключевое слово, программа, переменная класса, слово, целый, операции, сложение, вычитание, умножение, вычисление, расширение класса, реализация интерфейса, стек, базовый класс, стековый компилятор формул, дочерний класс, выведенный класс, супер класс, отношение наследования, суперкласс любого класса, иерархия классов, дерево, суперкласс, отрезок, вызов метода, динамический поиск метода, квалификатор доступа, компонент, массив, поле, контейнерный класс, стандартная библиотека, STL, Основной контейнер, вектор, перечисление, тип объекта, контейнер, тестовая программа, значение, бинарный оператор, операнд, Last, First, очередь, дек, double, множество, исключительная ситуация, L2-список, двусвязный, список, место, лист, L1-список, односвязный список, ограниченный контейнер, непрерывная реализация вектора, вершина, индекс, стек для данных, переменная, длина, множества, линейная сложность, временная эффективность, ссылочная реализация, определение, связывание, битовая реализация множества, битовый массив, поиск, хеширование, функция, хеш-функция, абстрактный класс, абстрактный метод, автоматическая переменная, память, автоматическое управление памятью, алгоритм, сборка, класс-предок, надкласс, динамическая переменная, автоматические переменные, подкласс, закрытый метод, получатель сообщения, отправитель сообщения, иерархия, множественное наследование, область видимости, идентификатор, ограничение доступа, открытый метод, перегрузка, переменная экземпляра, переопределение метода, поведение, получатель, производный класс, потомок, родительский класс, сборка мусора, время выполнения, терминальный класс, терминальный метод, терминатор, метод экземпляра, конструктор по умолчанию, методы класса, перегрузка метода, тип данных, тело метода, модуль, последовательный поиск, остаток

Применение ООП к разработке программных проектов

Несмотря на то, что язык Java является объектно-ориентированным, до сих пор при разработке программ мы по существу пользовались парадигмой директивного программирования — целью было создание кода, воздействующего должным образом на данные. Этот подход хорош при решении небольших задач, но порождает множество трудноразрешимых проблем при попытке создания больших программных систем.

Одной из альтернатив директивному программированию является объектно-ориентированное программирование, которое действительно помогает справиться с нелинейно растущей сложностью программ при увеличении их объема. Не следует, однако, делать вывод, что использование парадигмы объектно-ориентированного программирования гарантирует успешное решение всех проблем.

Для того чтобы стать профессионалом в программировании, необходимы талант, способность к творчеству, интеллект, знания, логика, умение строить и использовать абстракции и, самое главное, опыт.

В этом параграфе мы продолжим знакомство с базисными концепциями объектно-ориентированного программирования, начатое еще в первой главе книги. Сначала будут обсуждены общие для различных языков программирования понятия ООП, а затем — их реализация в языке Java.

Следует знать, что курс объектно-ориентированного программирования читается студентам-старшекурсникам в течение целого семестра, и поэтому материал, изложенный ниже, представляет собой лишь самое начальное введение в мир ООП. Значительно более полное изложение многих вопросов, связанных с объектно-ориентированными дизайном, проектированием и программированием, содержится в книге [2], а в третьей главе книги [13] можно найти очень ясное описание всех объектно-ориентированных аспектов языка Java.

Основные концепции ООП

Объектно-ориентированное программирование или ООП (object-oriented programming)методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является реализацией определенного типа, использующая механизм пересылки сообщений и классы, организованные в иерархию наследования.

Центральный элемент ООПабстракция. Данные с помощью абстракции преобразуются в объекты, а последовательность обработки этих данных превращается в набор сообщений, передаваемых между этими объектами. Каждый из объектов имеет свое собственное уникальное поведение. С объектами можно обращаться как с конкретными сущностями, которые реагируют на сообщения, приказывающие им выполнить какие-то действия.

ООП характеризуется следующими принципами (по Алану Кею):

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

Определение 10.1. Абстрагирование (abstraction)метод решения задачи, при котором объекты разного рода объединяются общим понятием (концепцией), а затем сгруппированные сущности рассматриваются как элементы единой категории.

Абстрагирование позволяет отделить логический смысл фрагмента программы от проблемы его реализации, разделив внешнее описание (интерфейс) объекта и его внутреннюю организацию (реализацию).

Определение 10.2. Инкапсуляция (encapsulation) — техника, при которой несущественная с точки зрения интерфейса объекта информация прячется внутри него.

Определение 10.3. Наследование (inheritance) — свойство объектов, посредством которого экземпляры класса получают доступ к данным и методам классов-предков без их повторного определения.

Наследование позволяет различным типам данных совместно использовать один и тот же код, приводя к уменьшению его размера и повышению функциональности.

Определение 10.4. Полиморфизм (polymorphism) — свойство, позволяющее использовать один и тот же интерфейс для различных действий; полиморфной переменной, например, может соответствовать несколько различных методов.

Полиморфизм перекраивает общий код, реализующий некоторый интерфейс, так, чтобы удовлетворить конкретным особенностям отдельных типов данных.

Определение 10.5. Класс (class) — множество объектов, связанных общностью структуры и поведения; абстрактное описание данных и поведения (методов) для совокупности похожих объектов, представители которой называются экземплярами класса.

Определение 10.6. Объект (object) — конкретная реализация класса, обладающая характеристиками состояния, поведения и индивидуальности, синоним экземпляра.

Как это уже отмечалось в самом начале курса, Java — лишь один из объектно-ориентированных языков. Другим активно используемым профессиональными программистами языком ООП, с который мы познакомимся в следующем семестре, является C++. В дальнейшем нам предстоит знакомство с такими представителями этого семейства, как Smalltalk, Delphi Pascal и CLOS.

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

Анастасия Халудорова
Анастасия Халудорова
екатерина яковлева
екатерина яковлева