Конспект лекций по курсу «Объектно-ориентированное программирование»




НазваниеКонспект лекций по курсу «Объектно-ориентированное программирование»
страница1/4
Дата публикации11.08.2013
Размер0.59 Mb.
ТипКонспект
lit-yaz.ru > Информатика > Конспект
  1   2   3   4




Конспект лекций по курсу

«Объектно-ориентированное программирование»
Литература:

  1. Б.Страуструп. Язык программирования C++, 3-е изд./Пер. с англ. – СПб.; М.: «Невский диалект» – «Издательство БИНОМ», 1999 г. – 991 с., ил.

  2. А. Пол. Объектно-ориентированное программирование на C++, 2-е изд./Пер. с англ. – СПб.; М.: «Невский диалект» – «Издательство БИНОМ», 1999 г. – 462 с., ил.

  3. C/C++. Программирование на языке высокого уровня/ Т.А. Павловская. – СПб.: Питер, 2001. – 464 с.: ил.

  4. Г. Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на C++, 2-е изд./Пер. с англ. – М.: «Издательство «Бином», СПб: «Невский диалект», 1998 г. – 560 с., ил.

  5. Мейерс С. Эффективное использование C++. 50 рекомендаций по улучшению ваших программ и проектов: Пер. с англ. – М.: ДМК, 2000. – 240 с.: ил. (Серия «Для программистов»).

  6. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. – СПб: Питер, 2001. – 368 с.: ил. (Серия «Библиотека программиста»)

  7. По UML.


1. Введение
1.1. История развития C++.

(Язык C был спроектирован Деннисом Ритчи в начале 70-х для создания UNIX).

Создатель C++ – Бьерн Страуструп (Bjarne Stroustrup), AT&T.

1980 г. «C с классами»

1998. Ратифицирован стандарт C++


Нововведение

Источник нововведения

Основные средства

C

Концепция классов (c производными классами и виртуальными функциями)

Simula67

Средства перегрузки операторов и возможность помещения объявлений в любом месте, где может быть записана инструкция

Algol68

Шаблоны

Ada, параметризованные модули в Clu

Механизм обработки исключений

Ada, Clu, ML

Множественное наследование, чисто виртуальные функции, пространства имен

Опыт использования C++


1.2. Использование C++
На C++ написаны операционные системы (полностью или частично).

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

Малый объем требуемой памяти.

Связь с ассемблером.


inc

++a

dec

--a

add

a+=

sub

a-=

mul

a*=






Как правило, ключевыми аспектами являются удобство сопровождения, расширяемость и простота тестирования. Эти свойства C++ привели к его широкому использованию в областях, где совершенно необходима надежность, а также там, где требования к программам значительно меняются со временем (банковское дело, торговля, страхование, телекоммуникации, военные приложения).

На C++ решается множество численных, научных и инженерных задач. (Причина этого в том, что традиционные численные задачи должны совмещаться с графикой и вычислениями, связанными со структурами данных, которые не укладываются в традиционный Фортран.)

Графика и пользовательские интерфейсы – области интенсивного использования C++.

С++ возможно эффективно использовать в программах, предназначенных для широкого диапазона прикладных областей.

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

С++ может сосуществовать с фрагментами кода и программами, написанными на других языках.

C++ широко используется для обучения и исследований (моделирующие программы), т.к. он:

Реализация C++:

Для PC, Windows: Microsoft Visual C++ 6.0, 7.0, Borland C++.

Для UNIX-систем это – системный компилятор GNU v3.XX.

1.3. ООП
[Павловская]

В окончательном виде любая программа представляет собой набор инструкций процессора. Все, что написано на любом языке программирования, – более удобная, упрощенная запись этого набора инструкций, облегчающая написание, отладку и последующую модификацию программы. Чем выше уровень языка, тем в более простой форме записываются одни и те же действия. Например, для реализации цикла на ассемблере нужно записать несколько инструкций, позаботившись о размещении переменных в регистрах, а в C или Паскале для этого достаточно одного оператора.

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

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

Следующий шаг – использование модулей. Модуль – это набор связанных процедур вместе с данными, которые они обрабатывают. При этом программа структурируется и информация группируется. Извне модуля информация видна в более естественном виде. Например, можно представлять в одном модуле все разнородные сведения, относящиеся к фигуре, вычерчиваемой на экране (положение, размер, ориентация (угол поворота), цвет).

Для работы с этими данными требуются специальные функции (напрмер переместить, повернуть, сменить цвет, прочертить). Они помещаются вместе с данными в модуль.

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

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

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

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

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

Класс является типом данных, определяемым пользователем. Тип задает внутреннее представление данных в памяти компьютера, множество значений, которое могут принимать величины этого типа, а также операции и функции, применяемые к этим величинам. Все это можно задать и в классе. Например, тип int определяет, что величина этого типа (int i) занимает 4 байта, принимает значения от -231 до 231-1 и ее можно складывать, вычитать, и т.д. Создаваемый тип данных (квадрат) определяет, что объект этого типа (конкретный квадрат) будет занимать столько байт, сколько необходимо для размещения отдельных данных (положение, размер, ориентация (угол поворота), цвет). Размещение и размер квадрата ограничены пределами экрана, угол поворота – от 0 до 90 градусов. Квадрат можно переместить, повернуть, сменить цвет, прочертить.

Существенным свойством класса является то, что детали его реализации скрыты от пользователей класса за интерфейсом (ведь и в реальном мире можно, например, управлять автомобилем, не имея представления о принципе внутреннего сгорания и устройстве двигателя).
Объектно-ориентированное программирование (ООП) – основная методология программирования 90-х. Она берет начало в Simula 67 и продолжается в (ранних) Smalltalk, LISP, Clu и (более поздних) Actor, Eiffel, Objective C, Java и C++.

[Буч]: ООП – это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.

В данном определении можно выделить три высказывания:

  1. ООП использует в качестве базовых элементов объекты, а не алгоритмы;

  2. каждый объект является экземпляром какого-либо определенного класса;

  3. классы организованы иерархически.


[Пол]: Концепции ООП

  • Моделирование действий из реального мира

  • Наличие типов данных, определяемых пользователем

  • Сокрытие деталей реализации

  • Возможность многократного использования кода благодаря наследованию

  • Интерпретация вызовов функций на этапе выполнения


[Буч]: (Инкапсуляция – маскировка всех внутренних деталей, не влияющих на внешнее поведение.)

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

Inheritance – наследование.
^ Фазы трансляции

Программа на C++ состоит из:

  • одного или нескольких исходных файлов (с расширением .cpp);

  • нуля и более заголовочных файлов (с расширением .h).

Каждый этих файлов содержит некоторую часть текста программы.

Трансляция включает в себя три фазы (см. рис. 2):

а) фаза препроцессирования. Каждый исходный файл вместе со включенным в него (с помощью директивы #include) текстом из заголовочных файлов образует так называемую единицу трансляции. Также обрабатываются другие директивы препроцессора;

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

в) фаза компоновки. Объектные файлы объединяются в исполнимый модуль.

Рис.1. Трансляция программы на C++
Каждый исходный (.cpp) файл проходит две первые фазы независимо от остальных. Поэтому при изменении текста в одном .cpp-файле перекомпиляции требует только этот .cpp-файл. При изменении .h-файла перекомпиляция потребуется для всех .cpp-файлов, включающих его.

Препроцессор

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

Директивы препроцессора указывают действие, которое нужно выполнить препроцессору. Все директивы начинаются с символа #.

Директива макроопределения

#define идентиф замещающий_текст

#define идентиф(идентиф, идентиф, …, идентиф) замещающий_текст

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

#define IDI_ICON1 101

#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))

#define CASE break; case

#define FOREVER for(;;)

Макросы имеют большое значение в C, но в C++ они используются значительно реже. Вместо макроподстановки, определяющей константу, рекомендуется определять константу с помощью ключевого слова const, а вместо макроподстановки функционального вида – inline-функции.
^ Директива #include.

#include "path-spec"

#include <path-spec>

Директивы включения могут быть вложенными (до 10 уровней).
#undef идентиф

#pragma токен-стринг #pragma vtordisp( off )

^ Область видимости (scope)

Каждое имя (не только имя переменной) в C++ может использоваться только в определенной области программы. Эта область называется областью видимости имени.

Существует 5 областей видимости: локальная о.в., о.в. функции, о.в. файла, о.в. класса, о.в. прототипа.

  1. Локальная область видимости. Имя, объявленное внутри блока, доступно только в этом блоке и в содержащихся в нем блоках, и только после точки объявления. Замещение имен.

  2. Область видимости функции. Такую о.в. имеют только метки для оператора goto. Метки могут использоваться в любом месте функции, но не за ее пределами.

  3. Область видимости файла. Любое имя, объявленное вне какого бы то ни было блока или класса, имеет о.в. файла. Имя доступно после точки объявления до конца файла. Доступ через унарный оператор ::i

  4. Область видимости класса. Имена членов класса имеют о.в. класса. Доступ через объект (. ->) и через бинарный оператор classname::i.

  5. Область видимости прототипа. Эту о.в. имеют имена, объявленные в прототипе функции.


^ Связывание (linkage)

Программа состоит из нескольких единиц трансляции, связываемых вместе. Способ, которым имена объектов и функций совместно используются в различных ед. трансляции, называется связыванием. Существует 3 типа связывания: внутреннее (static int a;), внешнее (int a; extern int a;) и отсутствие связывания (typedef, enum).
^ Виды переменных по типу выделяемой памяти (способы использования памяти)

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

  2. Автоматическая память, в которой располагаются аргументы функций и локальные переменные. Для многопотокового или рекурсивного кода автоматические переменные создаются отдельно для каждого экземпляра блока. Автоматические переменные существуют до выхода управления из содержащего их блока. Обычно авт. перем. размещаются в стеке.

  3. Свободная (динамическая) память, которую явно требует программа при размещении объектов, и которую она может освободить после того, как память больше не нужна (при помощи new и delete).

  1   2   3   4

Добавить документ в свой блог или на сайт

Похожие:

Конспект лекций по курсу «Объектно-ориентированное программирование» iconОбъектно-ориентированное программирование
Курсовая работа по специальности 230201 «Информационные системы и технологии»: М. 2012 г., Мирэа, факультет Информационных технологий,...

Конспект лекций по курсу «Объектно-ориентированное программирование» iconКонспект лекций «Логистика. Конспект лекций»
Конспект лекций соответствует требованиям Государственного образовательного стандарта высшего профессионального образования

Конспект лекций по курсу «Объектно-ориентированное программирование» iconГрегори К. Использование Visual C++ Специальное издание. М.; Спб
Буч Г. Объектно-ориентированное проектирование с примерами применения. – М.: Конкорд, 1992. – 519 с

Конспект лекций по курсу «Объектно-ориентированное программирование» iconКонспект лекций доцента и. А. Волковой по курсу «системы программирования»
Система программирования – комплекс программных инструментов и библиотек, который поддерживает создание и существование программного...

Конспект лекций по курсу «Объектно-ориентированное программирование» iconКонспект лекций по дисциплине вгипу, 2009 Конспект лекций по дисциплине «Управление персоналом»
Крупица В. В., Яшкова Е. В., Егоров Е. Е. Управление персоналом: Конспект лекций по дисциплине – вгипу, 2009

Конспект лекций по курсу «Объектно-ориентированное программирование» iconКонспект лекций. (Электронный учебник) Минск: бгэу, 2010. Тема 1...
Короленок Г. А. Менеджмент в торговле. Конспект лекций. (Электронный учебник) Минск: бгэу, 2010

Конспект лекций по курсу «Объектно-ориентированное программирование» iconПоляков Д. Б., Круглов И. Ю. Программирование в среде турбо паскаль (версия 5)
Зуев Е. А. Программирование на языке turbo pascal 0, М.: Радио и связь, 1993. 384

Конспект лекций по курсу «Объектно-ориентированное программирование» iconУчебное пособие к курсу лекций «Введение в современную литературу»
Предлагаемое издание является учебным пособием к вузовскому курсу «Введение в современную литературу», который читается для студентов...

Конспект лекций по курсу «Объектно-ориентированное программирование» iconКонспект лекций, которые проф. Пугинский Б. И. читал в весеннем семестре...
Закончились а для кого-то они даже и не начинались, жалко. Закончились объединив как никогда прежде два потока. Закончились превратившись...

Конспект лекций по курсу «Объектно-ориентированное программирование» iconЛитература к курсу лекций
Алексеев П. В. Философы в России 19-20 столетий. Биографии, идеи, труды. 3-е изд. М., 1999



Образовательный материал



При копировании материала укажите ссылку © 2013
контакты
lit-yaz.ru
главная страница