Рекомендуемая литература: |
| Visual C++ 6: учебный курс - СПб: Питер,2001. - 576 с. : ил. Visual C++ 6 - Спб.:БХВ - Санкт-Петербург, 1998. - 496 с. : ил. ак программировать на С++: Пер. с англ. - М,: Издательство БИНОМ, 1998 - 1024 с.: ил. Шилдт, Герберт. Полный справочник по С, 4-е издание. : Пер. с англ. - М,: Издательский дом "Вильямс", 2002. - 704 с. : ил. - Парал. т ит. англ. Шилдт, Герберт. Самоучитель С++, 3-е издание: пер. с англ. - СПб.: BVH - Санкт-Петербург, 1998.-688 с. С/C++. Программирование на языке высокого уровня. / . - СПб.: Питер, 2002. - 464 с.: ил. C/C++ в задачах и примерах. - СПб.:БХВ-Петербург, 2001. - 288 с.: ил. , Начальный курс С и С++. - М,: ДИАЛОГ_МИФИ, 1996. - 288 с. , Программирование на языке Си: Учеб. пособие. - М.: Финансы и статистика, 1998. - 600 с.: ил. ++: учебный курс. - СПб.: Питер, 2001. - 528 с.: ил. Дэвис ++ для "чайников", 4-е издание.: Перев. с англ.: Уч. пос. - М.: Издательский дом "Вильямс", 2001. - 336 с.: ил. рограммируем на Си/Пер. с англ. и предисл. , . - М.: Компьютер, ЮНИТИ, 1994. - 236 с.: ил. Программирование на языках Си и Си++: Практ. пособие. - М.: Высш. шк., 1996. -240 с.: ил. Язык программирования Си. - М.: Центр НТТМ "Алгоритм", 1990. - 76 с. Уинер Турбо Си: Пер. с англ. - М.: Мир, 1991. - 384 с.: ил. , Толковый словарь по информатике.-М.: Финансы и статистика, 1991.-543 с. и др. Borland C++ 5: пер. с англ. - Санкт-Петербург, 1997.- 976 с., ил. |
Лекция 2. Объектно ориентированное С++ программирование.
Остановимся на самом распространенном заблуждении: программирование на С++ - это объектно ориентированное программирование. Это далеко не так.
С++ имеет механизмы для объектно ориентированного программирования и потому поддерживает объектно ориентированный подход. Однако, личное дело программиста: воспользоваться или нет преимуществами этой философии. Можно писать на языке С++ программы, как и прежде в С, не пользуясь объектно ориентированной добавкой С++. Ведь С-программирование - это часть С++. Потому можно писать в С++ и очень успешно С-программы, не пользуясь объектно ориентированной идеологией С++.
Но тогда в каком же случае и при каких обстоятельствах можно, нужно, выгодно и имеет смысл использовать концепцию объектной ориентированности?
Как уже упоминалось, первоначально программирование для компьютеров было преимущественно связано с решением математических задач. Программист сам работал за пультом ЭВМ: он писал на машинном языке свои программы и затем сам же вводил команды в память компьютера и отлаживал их без использования специальных средств автоматизации. Естественно, этот процесс был очень трудоемким и медленным.
Элементарный выход был найден в разделении труда. На Вычислительном центре стали повсеместно вводить должность оператора, которому поручалась работа по вводу информации в память ЭВМ. Теперь программист мог большую часть своего рабочего времени проводить за свои рабочим столом: думать и программировать, но он должен был еще и готовить задание оператору. Это, конечно, несколько повысило эффективность его труда. Но не столь резко. Программист все же предпочитал сам выходить со своей задачей для отладки на компьютер.
В то время аппаратные средства и, в частности, память ЭВМ, были еще весьма ограничены. Компьютерные сбои были очень частым и весьма распространенным явлением.
Но по мере увеличения мощности оборудования и снижения его себестоимости значительно расширялся круг задач. Росла сложность задач, решаемых на компьютере. Возникала настоятельная потребность в ускорении процесса программирования без потери качества программ. Значительно усложнялось и само программирование. Возникли, как я уже упомянул, и первые проблемы в нем. Для их преодоления были изобретены подпрограммы, библиотеки подпрограмм, а затем и первые языки программирования:
- Fortran - для решения инженерных задач;
- Cobol - для решения экономических задач;
- Pascal - для обучения методам структурного программирования.
Были предложены новые методики в программировании, например, структурное программирование. Это были выдающиеся попытки осмыслить проблемы организации труда программиста и Вычислительного центра в целом. Они дали свои положительные результаты.
Были в то время и первые попытки создавать специальные языки программирования для начинающих. Например, таким был всем известный Basic. В момент его изобретения авторы языка должны были ограничиться только заглавными буквами латинского алфавита, так как реальная память не позволяла им еще использовать и строчные буквы.
Но технический прогресс в области вычислительной техники развивается такими семимильными шагами, так стремительно и быстро, что вскоре были изобретены новые запоминающие устройства для оперативной памяти компьютера, и память стала такой дешевой, что поменялась идеология программирования. Теперь уже никто не настаивал и не говорил об экономии ячеек памяти. Это перестало быть актуальным. Памяти теперь было, что называется, навалом. Можно было разрабатывать гигантские комплексы программ, состоящие не просто из 50000 команд, а превышающие этот рубеж в 2-3 и более раз.
Но возможности памяти человека оставались прежними. Становилось все труднее, следуя процедурному программированию, отслеживать поведение функций, из которых строилась, как правило, программа. На смену процедурному подходу к программированию пришел объектно ориентированный подход.
Были введены понятия объектов, классов и другие нововведения, которые и делают С++ объектно ориентированным.
Таким образом, объектно ориентированное программирование позволило успешно программировать огромные, точнее сверх большие комплексы программ, и именно в этих случаях его применение оправдано.
2. Процедурное и объектно ориентированное программирование.
Отличительным признаком процедурного программирования является использование подпрограмм, процедур и функций. Программисты давно поняли, что задача решается проще, если ее разложить на подзадачи. Эти подзадачи и стали основой разработки подпрограмм. В языке Паскаль подпрограммы - это процедуры и функции. В языке Си роль подпрограмм выполняют функции.
В объектно ориентированном программировании идут дальше подпрограмм, процедур и функций. Степень обобщения реального мира такова, что, как в биологии и естествознвании, в программировании в последнее время вводятся объекты и из них образуются классы объектов, совершенно аналогичные объектам и классам объектов в других разделах знаний.
Например, рассмотрим задачу пополнения вклада на сберегательном счету в банке. При процедурном подходе первое, что приходит на ум - это дробить поставленную задачу на более мелкие самостоятельные части - подзадачи. В данном случае можно предложить в задаче "Внести вклад" следующие подзадачи:
- сохранение первого вклада; рассчёт нового баланса: поиск предыдущего баланса; добавление новой суммы вклада; запоминание нового баланса.<>/LI>
Этот подход наглядно изображен ниже на следующем рисунке: 
На этом рисунке Вы видите "дерево" подпрограмм. Но с увеличением сложности задачи количество "ветвей" на "дереве" возрастает. И если решаемая задача слишком большая, то и количество подзадач становится огромным и трудноуправляемым. В таком случае даже группе программистов будет весьма сложно осмыслить всю задачу в целом и следить за ее развитием и реализацией отдельными программистами.
Естественно, что указать ту границу, за которой сложность процедурного подхода становится решающим фактором, сдерживающим моментом программирования, довольно трудно. Некоторые специалисты оценивают эту "точку фазового перехода" примерно в 100000 строк кода программы. Так из процедурного подхода возник новый объектно ориентированный подход в программировании.
В объектно-ориентированном программировании программист уходит от такого деления задачи на мелкие части. Он пытается увидеть задачу как некую "абстракцию" реального мира. Его интересуют взаимодействия между этими идеализированными "абстракциями" - объектами реального мира. Таким образом, он должен, используя свой опыт и знания, увидеть эти "абстракции", распознать их в своей задаче. Давайте вернемся к нашему примеру со сберкнижкой и вкладами. Какие здесь имеются реальные объекты?
Очевидно, что это счет в банке и сберегательная книжка. Как они взаимодействуют? Когда производится первый вклад, то запись о нем вносится в сберегательную книжку. При повторных взносах нужно вычислять новый баланс: сумма вклада должна быть добавлена к уже имеющейся на сберкнижке. Но эта операция сложения является неотъемлемым свойством самой сберкнижки. Вам нужно предъявить новую итоговую сумму вклада. Если изобразить это на рисунке, то все будет выглядеть примерно так:

Таким образом, при объектно ориентированном подходе выделены два взаимодействующих объекта: счет в сберегательном банке (SavingsAccount) и сберегательная книжка (TransactionRegister). Обратите внимание на то, что при новом объектно ориентированном подходе решение задачи наглядно изображено уже не деревом, как это было прежде, а некоторым графом. На этом рисунке видно, что проект задачи представлен в виде двух объектов. Этим объектам сопоставлены определенные свойства, и схема задачи стала значительно проще, чем при процедурном подходе, когда вся задача расчленялась на множество подзадач - подпрограмм.
Рекомендуемая литература: |
| Visual C++ 6: учебный курс - СПб: Питер,2001. - 576 с. : ил. Visual C++ 6 - Спб.:БХВ - Санкт-Петербург, 1998. - 496 с. : ил. ак программировать на С++: Пер. с англ. - М,: Издательство БИНОМ, 1998 - 1024 с.: ил. Шилдт, Герберт. Полный справочник по С, 4-е издание. : Пер. с англ. - М,: Издательский дом "Вильямс", 2002. - 704 с. : ил. - Парал. т ит. англ. Шилдт, Герберт. Самоучитель С++, 3-е издание: пер. с англ. - СПб.: BVH - Санкт-Петербург, 1998.-688 с. С/C++. Программирование на языке высокого уровня. / . - СПб.: Питер, 2002. - 464 с.: ил. C/C++ в задачах и примерах. - СПб.:БХВ-Петербург, 2001. - 288 с.: ил. , Начальный курс С и С++. - М,: ДИАЛОГ_МИФИ, 1996. - 288 с. , Программирование на языке Си: Учеб. пособие. - М.: Финансы и статистика, 1998. - 600 с.: ил. ++: учебный курс. - СПб.: Питер, 2001. - 528 с.: ил. Дэвис ++ для "чайников", 4-е издание.: Перев. с англ.: Уч. пос. - М.: Издательский дом "Вильямс", 2001. - 336 с.: ил. рограммируем на Си/Пер. с англ. и предисл. , . - М.: Компьютер, ЮНИТИ, 1994. - 236 с.: ил. Программирование на языках Си и Си++: Практ. пособие. - М.: Высш. шк., 1996. -240 с.: ил. Язык программирования Си. - М.: Центр НТТМ "Алгоритм", 1990. - 76 с. Уинер Турбо Си: Пер. с англ. - М.: Мир, 1991. - 384 с.: ил. , Толковый словарь по информатике.-М.: Финансы и статистика, 1991.-543 с. и др. Borland C++ 5: пер. с англ. - Санкт-Петербург, 1997.- 976 с., ил. |
Лекция 3. Структура программы на Си++
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |


