Центральный Дом Знаний - Объектно-ориентированное программирование

Информационный центр "Центральный Дом Знаний"

Заказать учебную работу! Жми!



ЖМИ: ТУТ ТЫСЯЧИ КУРСОВЫХ РАБОТ ДЛЯ ТЕБЯ

      cendomzn@yandex.ru  

Наш опрос

Как Вы планируете отдохнуть летом?
Всего ответов: 854



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

Введение 3
Глава 1. Объектно-ориентированное программирование 4
1.1 Почему Объектно-ориентированное программирование (ООП) так популярно? 4
1.2 Резюме 5
1.3 Объект 6
1.4 Класс 7
Разновидности классов 7
Описание нового класса 9
1.5 Конструкторы и деструктор 10
Конструкторы 10
Примеры конструкторов: 11
Деструктор 12
Пример деструктора: 12
Итоговые замечания по конструкторам и деструкторам: 12
1.6 Объекты: сообщения, наследование и полиморфизм 13
1.7 Принципы, составляющие суть ООП. 14
1.8 Визуальное программирование 14
Практикум 15
Решение 16
Приложение 19
Заключение 20
Литература 21
Введение
Объектно-ориентированное программирование (ООП) стало чрезвычайно популярно в 90-х. Появилось несчетное количество книг и специальных выпусков академических (и не только) журналов, посвященных этому предмету. Студенты стремятся к записи «компетентен в объектно-ориентированном программировании» в своих характеристиках. Чтобы оценить эту безумную активность, отметим, что объектно-ориентированное программирование приветствуется с большим энтузиазмом, чем тот, который мы видели ранее при провозглашении таких революционных идей, как «структурное программирование» или «экспертные системы».
Когда программисты спрашивают друг друга: «Чем же, в конце концов, является объектно-ориентированное программирование?», ответ чаще всего подчеркивает синтаксические свойства таких языков, как C++ или Object Pascal. Тем самым обсуждение обычно переходит на такие предметы, как классы и наследование, пересылка сообщений, виртуальные и статические методы. Но при этом опускают наиболее важный момент в объектно-ориентированном программировании, который не имеет ничего общего с вопросами синтаксиса.
Моя цель в данной работе состоит в том, чтобы исследовать и объяснить основные принципы объектно-ориентированного программирования, а также проиллюстрировать следующие утверждения.
ООП — это революционная идея, совершенно непохожая на что-либо
выдвигавшееся в программировании.
ООП — это эволюционный шаг, естественным образом вытекающий из
предшествующей истории.
Глава 1. Объектно-ориентированное программирование
1.1 Почему Объектно-ориентированное программирование (ООП) так популярно?
Я перечислю некоторые (на мой взгляд — самые главные) причины огромной популярности объектно-ориентированного программирования в последнее десятилетие:
 Надежда, что ООП может просто и быстро привести к росту продуктивности  и улучшению надежности программ, помогая тем самым разрешить кризис в программном обеспечении;
 Желание перейти от существующих языков программирования к новой
технологии;
 Вдохновляющее сходство с идеями, родившимися в других областях.
Объектно-ориентированное программирование является лишь последним звеном в длинной цепи решений, которые были предложены для разрешения «кризиса программного обеспечения». Положа руку на сердце: кризис программного обеспечения просто означает, что наше воображение и те задачи, которые мы хотим решить с помощью компьютеров, почти всегда опережают наши возможности.
Объектно-ориентированное программирование действительно помогает при создании сложных программных систем. Программирование по-прежнему является одной из наиболее трудных задач, взваливаемых на себя человеком. Чтобы стать профессионалом в программировании, необходимы талант, способность к творчеству, интеллект, знания, логика, умение строить и использовать абстракции и, самое главное, опыт — даже в том случае, когда используются лучшие средства разработки. 
Объектно-ориентированное программирование является новым пониманием того, что собственно называется вычислениями, а также того, как мы можем структурировать информацию внутри компьютера. 
Чтобы стать профессионалом в технике ООП, требуется полная переоценка привычных методов разработки программ.
1.2 Резюме
Объектно-ориентированное программирование — это не просто несколько новых свойств, добавленных в уже существующие языки. Скорее — это новый шаг в осмыслении процессов декомпозиции задач и разработки программного обеспечения.
ООП рассматривает программы как совокупность свободно (гибко) связанных между собой агентов, называемых объектами. Каждый из них отвечает за конкретные задачи. Вычисление осуществляется посредством взаимодействия объектов. Следовательно, в определенном смысле программирование — это ни много, ни мало, как моделирование мира.
Объект получается в результате инкапсуляции состояния (данных) и поведения (операций). Тем самым объект во многих отношениях аналогичен модулю или абстрактному типу данных. Поведение объекта диктуется его классом. Каждый объект является экземпляром некоторого класса. Все экземпляры одного класса будут вести себя одинаковым образом (то есть вызывать те же методы) в ответ на одинаковые запросы.
Объект проявляет свое поведение путем вызова метода в ответ на сообщение. Интерпретация сообщения (то есть конкретный используемый метод) зависит от объекта и может быть различной для различных классов объектов.
Объекты и классы расширяют понятие абстрактного типа данных путем введения наследования. Классы могут быть организованы в виде иерархического дерева наследования. 
Данные и поведение, связанные с классами, которые расположены выше в иерархическом дереве, доступны для нижележащих классов. Происходит наследование поведения от родительских классов.
С помощью уменьшения взаимозависимости между компонентами программного обеспечения ООП позволяет разрабатывать системы, пригодные для многократного использования. Такие компоненты могут быть созданы и отлажены как независимые программные единицы, в изоляции от других частей прикладной программы.
1.3 Объект
Развитие идей структурного и событийного программирования существенно подняло производительность труда программистов и позволило в разумные сроки (несколько месяцев) создавать приложения объемом в сотни тысяч строк. Однако такой объем уже приблизился к пределу возможностей человека, и потребовались новые технологии разработки программ.
В начале 80-х годов в программировании возникло новое направление, основанное на понятии объекта. До того времени основные ограничения на возможность создания больших систем накладывала разобщенность в программе данных и методов их обработки.
Реальные объекты окружающего мира обладают тремя базовыми характеристиками: они имеют набор свойств, способны разными методами изменять эти свойства и реагировать на события, возникающие как в окружающем мире, так и внутри самого объекта. Именно в таком виде в языках программирования и реализовано понятие объекта как совокупности свойств (структур данных, характерных для этого объекта), методов их обработки (подпрограмм изменения свойств) и событий, на которые данный объект может реагировать, и которые приводят, как правило, к изменению свойств объекта.
Появление возможности создания объектов в программах качественно повлияло на производительность труда программистов. Максимальный объем приложений, которые стали доступны для создания группой программистов из 10 человек, за несколько лет увеличился до миллионов строк кода, при этом одновременно удалось добиться высокой надежности программ и, что немаловажно, повторно использовать ранее созданные объекты в других задачах.
1.4 Класс
Объекты могут иметь идентичную структуру и отличаться только значениями свойств. В таких случаях в программе создается новый тип, основанный на единой структуре объекта (по аналогии с тем, как создаются новые типы для структур данных). Он называется классом, а каждый конкретный объект, имеющий структуру этого класса, называется экземпляром класса.
Разновидности классов
Классы в объектно-ориентированном программировании имеют несколько различных форм и используются для разных целей. Следующие категории охватывают большую часть классов:
Управление данными;
Источники данных или посредники в передаче данных;
Классы для просмотра данных;
Вспомогательные, или упрощающие проектирование, классы.
Этот список не является исчерпывающим, однако он вполне подходит для учебных целей. Большинство объектно-ориентированных приложений включают как классы вышеперечисленных категорий, так и другие. Если оказывается, что класс «разрывается» между двумя категориями, то зачастую его можно разбить на два класса.
Классы-администраторы данных Data Managers, часто получающие имена Data или State, — это классы, основной обязанностью которых является поддержка данных или информации о состоянии чего-либо. Например, для абстрактной модели игры в карты основная задача класса Card состоит в том, чтобы хранить масть и ранг (достоинство) карты. 
Классы-администраторы данных обычно являются фундаментальными строительными блоками проекта, а их прототипами в спецификации проекта являются существительные.
Источники данных Data Sources — это классы, которые генерируют данные (например, случайные числа). Посредники при передаче данных Data Sinks, естественно, служат для приема и дальнейшей передачи данных (например, запись в файл). В отличие от администраторов данных, источники и посредники не хранят внутри себя данные в течение неопределенного времени, но генерируют их по запросу (источники данных) или обрабатывают их при вызове (посредники данных).
Классы для просмотра данных View и Observer также незаменимы практически в любом приложении. Все программы, так или иначе, осуществляют вывод информации (как правило, на экран). Соответствующий программный код нередко является сложным, часто модифицируется и в значительной степени не зависит от выводимых данных. Поэтому хорошим тоном в программировании считается изоляция внутренних данных от методов, осуществляющих вывод информации.
Полезно отделять собственно объект (называемый часто моделью) от его изображения (визуального представления). Благодаря этому принципу системы, обеспечивающие графический вывод информации, в значительной степени могут быть упрощены. В идеальном случае модель не требует и не содержит информации о своем визуальном представлении. Это упрощает многократное использование кода, поскольку одна и та же модель может применяться во многих приложениях. 
Модель зачастую имеет более одного визуального представления. Например, финансовая информация может быть представлена в виде гистограмм, круговых диаграмм, таблиц или рисунков. При этом сама информация остается неизменной.
К вспомогательным классам Facilitator и Helper разумно отнести те классы, которые не содержат полезной информации, но облегчают выполнение сложных заданий. Например, при отображении игральной карты мы используем вспомогательный класс, рисующий линии и текст на устройстве вывода. Другой служебный класс может, например, обслуживать связный список карт (колоду).
Описание нового класса
Описание нового класса похоже на описание новой структуры данных, только к полям (свойствам) добавляются методы — подпрограммы.
В Си++ и Паскале для описания класса используется ключевое слово class. Паскаль:
class TMyClass Iteml: integer; Item2: string;
function GetSum(n: integer): integer; procedure Initialize; end; Си++:
class TMyClass
{
int Iteml;
int Item2;
int GetSum(int n);
void Initialize();
При определении подпрограмм, принадлежащих конкретному классу, его методов, в заголовке подпрограммы перед ее названием явно указывается, к какому классу она принадлежит. Название класса от названия метода отделяют специальные символы (точка в Паскале или два двоеточия в Си++).

Паскаль:
procedure TMyClass.Initialize; begin
Iteml := 1; Item2 := «»; end; Си++:
void TMyClass::Initialize()
{
Iteml = 1;
Item2 = 0;
Класс — это тип данных, такой же, как любой другой базовый или сложный тип. На его основе можно описывать конкретные объекты (экземпляры классов).
Паскаль:
var Cl, C2: TMyClass; Си++:
TMyClass Cl, C2;
Доступ к свойствам объектов и к их методам осуществляется так же, как к полям записей, через точку:
Cl.Iteml := 5; С2.Initialize; х := Cl.GetSum(21);
Объектно-ориентированное программирование базируется на трех ключевых концепциях — инкапсуляции, наследовании и полиморфизме. Объединение данных с методами в одном типе (классе) называется инкапсуляцией. Помимо объединения, инкапсуляция позволяет ограничивать доступ к данным объектов и реализации методов классов. В результате у программистов появляется возможность использования готовых классов в своих приложениях на основе только описаний этих классов.
1.5 Конструкторы и деструктор

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

Примеры конструкторов:

class TDate{ // Класс для работы с датой
...
public:  
  // Конструкторы, только прототипы, реализации в другом месте
  TDate(int dd, int mm, int yy);  // 
  TDate(int);   // порядковый номер дня от Р.Х.
  TDate(char*); // строка "dd.mm.yy"
  TDate();      // текущая дата по компьютерным часам 
... 
};
...
// Создание и инициализация объектов через вызов конструкторов 
TDate today(22, 11, 2002);
TDate April1("01.04.2001");
TDate now();

В конструкторах, как и в обычных функциях, возможно использование значений по умолчанию:

class TDate{ 
...
public:  
  TDate(int d=0,int m=0,int y=0); // по умолчанию все значения 0
...
}
...
TDate::TDate(int d,int m,int y){
...
 day=d?d:today.day; // если d==0, то d=today.day

};

//?TDate d=today; // возможна инициализация объекта посредством присваивания 
Деструктор
Специализированная функция (деструктор) - вызывается по окончании работы объекта. Обычно выполняет завершающие действия: закрытие файла, восстановление состояния программы (экрана), освобождение памяти.
Имя функции-деструктора совпадает с именем класса с добавлением знака " ~” "тильда”. Деструкторы не возвращают значений. Деструктор вызывается автоматически при выходе объекта из зоны видимости. Возможен явный вызов деструктора для динамически создаваемых объектов через операцию delete.
Пример деструктора: 
class X{
  char* S;
public:
  X(int);
  ~X();
};

X::X(int N){     // Конструктор
 S=new char[N];  // Динамическое выделение памяти
}
X::~X(){    // Деструктор
 delete S;  // Освобождение динамически выделенной памяти
}

X Obj1(256); 
X* pObj2=new X(125);// динамическое выделение памяти под объект типа X

delete pObj2; // явный вызов деструктора

Итоговые замечания по конструкторам и деструкторам:
Если у класса есть конструктор, он вызывается  каждый раз при создании объекта.
Если у класса есть деструктор, он вызывается, когда объект уничтожается.
Конструкторов может быть много, деструктор всегда один.

1.6 Объекты: сообщения, наследование и полиморфизм
Объектно-ориентированное программирование добавляет несколько новых важных идей к концепции абстрактных типов данных. Главная из них — пересылка сообщений. Действие инициируется по запросу, обращенному к конкретному объекту, а не через вызов функции. В значительной степени это просто смещение ударения: традиционная точка зрения делает основной упор на операции, в то время как ООП на первое место ставит собственно значение. Вызываете ли вы подпрограмму push со стеком и значением в качестве аргументов, или же вы просите объект stack поместить нужное значение к нему внутрь? Если бы это было все, что имеется в объектно-ориентированном программировании, эта техника не рассматривалась бы как принципиальное нововведение. Но к пересылке сообщений добавляются мощные механизмы переопределения имен и совместного (многократного) использования программного кода.
Наконец, объектно-ориентированное программирование добавляет механизмы наследования и полиморфизма. Наследование позволяет различным типам данных совместно использовать один и тот же код, приводя к уменьшению его размера и повышению функциональности. Полиморфизм перекраивает этот общий код так, чтобы удовлетворить конкретным особенностям отдельных типов данных. Упор на независимость индивидуальных компонент позволяет использовать процесс пошаговой сборки, при которой отдельные блоки программного обеспечения разрабатываются, программируются и отлаживаются до того, как они объединяются в большую систему.
1.7 Принципы, составляющие суть ООП.

Рассмотрим три:
Инкапсуляция (Encapsulation – сокрытие, герметизация внутри) – объединение данных и кода + защита от внешнего вмешательства и неверного использования. Реализация класса может быть скрыта в защищенной области (private, protected), доступ к которой осуществляется через интерфейсные поля/функции публичной (public) области.
Наследование (Inheritance) - создание нового класса как потомка уже существующего добавлением новых полей и методов, при этом возможно перекрытие (переопределение) полей и методов класса-предка. Создается иерархия классов.
Полиморфизм (Polymorphism) – множественность форм – это свойство, которое позволяет одно и тоже имя использовать для решения технически разных задач. Таким образом, реализован, например, механизм перекрытия функций.(.......)
Loading

Календарь

«  Август 2017  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031

Архив записей

Друзья сайта

  • Заказать курсовую работу!
  • Выполнение любых чертежей