Отправляет email-рассылки с помощью сервиса Sendsay

Все C ++, С, создание ОС UNIX на C++

  Все выпуски  

Все C ++, С, создание ОС UNIX на C++ (Выпуск 2)


Информационный Канал Subscribe.Ru


Начиная с данной статьи мы приступим к детальному изучению языка С++ и попутно
будем подробно рассматривать построение 

различных операционных систем с помощью С++ (Windows,Unix,Novell). 

        Объектно-ориентированный подход.

Основополагающей идеей объектно-ориентированного подхода является объединение
данных и действий, производимых над этими 

данными, в единое целое, которое называется объектом. Функции объекта, называемые
в C++ методами или функциями-членами, 

обычно предназначены для доступа к данным объекта. Если необходимо считать какие-либо
данные объекта, нужно вызвать 

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

сокрыты от внешнего воздействия, что защищает их от случайного изменения. Говорят,
что данные и методы инкапсулированы. 

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

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

друг друга.

        Аналогия.

Возможно, вы представляете себе объекты чем-то вроде отделов компании — бухгалтерии,
продаж, кадров и т. п. Деление на отделы 

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

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

распределяются между подразделениями, и у каждого подразделения имеются данные,
с которыми оно работает: у бухгалтерии — 

заработная плата, у отдела продаж — сведения, касающиеся торговли, у отдела кадров
— персональная информация о сотрудниках и 

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

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

целостность информационного пространства компании. Например, бухгалтерия несет
ответственность за информацию, касающуюся 

зарплат. Если у менеджера по продажам возникнет необходимость узнать суммарный
оклад сотрудников компании за июль, то ему не 

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

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

также ее защиту от возможного воздействия посторонних лиц.

        ООП: подход к организации программы.

Объектно-ориентированное программирование никак не связано с процессом выполнения
программы, а является лишь способом ее 

организации. Большая часть операторов C++ идентична операторам процедурных языков,
в частности языка С. Внешне метод класса в 

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

процедурной С-программы или объектно-ориентированной программы на C++.

        Характеристики объектно-ориентированных языков.
Здесь мы рассмотрим несколько основных элементов, входящих в состав объектно-ориентированных
языков, в частности в состав 

языка C++.

        Объекты.

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

функции вы сталкиваетесь с проблемой разбиения ее на объекты. Мышление в терминах
объектов оказывается гораздо более простым 

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

вопрос будет рассмотрен в дальнейшем. Что должно представляться в программе в
виде объектов? Окончательный ответ на этот 

вопрос может дать только ваше воображение, однако приведем несколько советов,
которые могут оказаться полезными:
♦  Физические объекты.
♦    Автомобили при моделировании уличного движения.
♦    Схемные элементы при моделировании цепи электрического тока.
♦    Страны при создании экономической модели.
♦    Самолеты при моделировании диспетчерской системы.
♦  Элементы интерфейса.
♦    Окна.
♦    Меню.
♦    Графические объекты (линии, прямоугольники, круги).
♦    Мышь, клавиатура, дисковые устройства, принтеры.
♦   Структуры данных.
♦    Массивы.

♦    Связанные списки.
♦    Бинарные деревья.
♦   Группы людей.
♦    Сотрудники.
♦    Студенты.
♦    Покупатели.
♦    Продавцы.
♦  Хранилища данных.
♦    Описи инвентаря.
♦    Списки сотрудников.
♦    Словари.
♦    Географические координаты городов мира.
♦   Пользовательские типы данных.
♦    Время.
   Величины углов.
♦    Комплексные числа.
♦   Точки на плоскости.
♦  Участники компьютерных игр. +   Автомобили в гонках.
♦    Позиции в настольных играх (шашки, шахматы).
♦    Животные в играх, связанных с живой природой.
♦   Друзья и враги в приключенческих играх.

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

результате такого объединения объекты в свое время произвели фурор, ведь ни одна
программная модель, созданная на основе 

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

        Классы.

Когда мы говорим об объектах, мы говорим, что они являются экземплярами классов.
Что это означает? Рассмотрим следующую 

аналогию. Практически все компьютерные языки имеют стандартные типы данных; например,
в C++ есть целый тип int. Мы можем 

определять переменные таких типов в наших программах:
int   day:
int   count:
int   divisor;
int   answer;
Подобным же образом мы можем определять объекты класса. Класс является своего
рода формой, определяющей, какие данные
и функции будут включены в объект класса. При объявлении класса не создаются
никакие объекты этого класса, по аналогии с тем, 

что существование типа int еще не означает существование переменных этого типа.
Таким образом, класс является описанием 

совокупности сходных между собой объектов. Это соответствует нестрогому в техническом
смысле пониманию термина «класс»: 

например, Prince, Sting и Madonna относятся к классу рок-музыкантов. Не существует
конкретного человека с именем 

«рок-музыкант», однако люди со своими уникальными именами являются объектами
этого класса, если они обладают определенным 

набором характеристик. Объект класса часто также называют экземпляром класса.
      
        Наследование.

Понятие класса приводит нас к понятию наследования. В повседневной жизни мы часто
сталкиваемся с разбиением классов на 

подклассы: например, класс животные можно разбить на подклассы млекопитающие,
земноводные, насекомые, птицы и т. д. Класс 

наземный транспорт делится на классы автомобили, грузовики, автобусы, мотоциклы
и т. д. Роль наследования в ООП такая же, как 

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

        Повторное использование кода.

Разработанный класс может быть использован в других программах. Это свойство
называется возможностью повторного использования 

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

программные проекты. В ООП концепция наследования открывает новые возможности
повторного использования кода. Программист 

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

изменения, и в то же время каждый из производных классов можно модифицировать
отдельно. Предположим, что вы (или кто-то 

другой) разработали класс, представляющий систему меню, аналогичную графическому
интерфейсу Microsoft Windows или другому 

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

установки и снятия флажков. В этом случае вы создаете новый класс, наследующий
все свойства исходного класса, и добавляете в 

него необходимый код. Легкость повторного использования кода уже написанных программ
является важным достоинством ООП. Многие 

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

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

рассылки.

        Пользовательские типы данных.

Одним из достоинств объектов является то, что они дают пользователю возможность
создавать свои собственные типы данных. 

Представьте себе, что вам необходимо работать с объектами, имеющими две координаты,
например х и у. Вам хотелось бы совершать 

обычные арифметические операции над такими объектами, например:
positionl = position2 + origin
где переменные positionl, position2 и origin представляют собой наборы из двух
координат. Описав класс, включающий в себя 

пару координат, и объявив объекты этого класса с именами positionl, position2
и origin, мы фактически создадим новый тип 

данных. В C++ имеются средства, облегчающие создание подобных пользовательских
типов данных.

        Полиморфизм и перегрузка.

Обратите внимание на то, что операции присваивания = и сложения + для типа position
должны выполнять действия, отличающиеся 

от тех, которые они выполняют для объектов стандартных типов, например int. Объекты
position 1 и прочие не являются 

стандартными, поскольку определены пользователем, как принадлежащие классу position.
Как же операторы = и + распознают, какие 

действия необходимо совершить над операндами? Ответ на этот вопрос заключается
в том, что мы сами можем задать эти действия, 

сделав нужные операторы методами класса position. Использование операций и функций
различным образом в зависимости от того, с 

какими типами величин они работают, называется полиморфизмом. Когда существующая
операция, например = или +, наделяется 

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

представляет собой частный случай полиморфизма и является важным инструментом
ООП.

        C++ и С.

C++ унаследовал возможности языка С. Строго говоря, C++ является расширением
языка С: любая конструкция на языке С является 

корректной в C++; в то же время обратное неверно. Наиболее значительные нововведения,
присутствующие в C++, касаются классов, 

объектов и ООП (первоначальное название языка C++ — «С с классами»). Тем не менее
имеются и другие усовершенствования, 

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

между С и C++, чем может показаться вначале. Несмотря на то что можно писать
программы на C++, внешне напоминающие программы 

на С, вряд ли кому-то придет в голову так поступать. Программисты, использующие
C++, не только пользуются преимуществами 

этого языка перед С, но и по-новому используют возможности, унаследованные от
С. Если вы знакомы с С, значит, у вас уже 

имеются некоторые знания относительно C++, но все же вероятно, что значительная
часть материала окажется для вас новой.

        Изучение основ.

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

мы уже говорили, значительная часть языка C++ унаследована от С, то даже при
объектно-ориентированной структуре программы ее 

основу составляют «старомодные» процедурные средства. Будут рассмотрены структуры,
синтаксис которых совпадает с синтаксисом 

классов. Если вы уже знакомы с языком С, то у вас, возможно, возникнет желание
пропустить эти выпуски рассылки. Тем не менее, 

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

невнимательном чтении. Поэтому мы советуем читателю бегло Просматривать тот материал,
который ему известен, а основное 

внимание сконцентрировать на различиях С и C++. Все примеры, начиная с этой главы,
будут иметь объектно-ориентированную 

структуру.

        Универсальный язык моделирования (UML).

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

понимается создание наглядной визуальной интерпретации чего-либо. UML позволяет
создавать подобную интерпретацию программ 

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

соответственно Гради Буч, Джеймс Рэмбо и Ивар Дже-кобсон. В конце 90-х годов
они объединили свои разработки, в результате 

чего получили продукт под названием универсальный язык моделирования (UML), который
был одобрен OMG — консорциумом компаний, 

определяющих промышленные стандарты. Почему UML необходим? Во-первых, потому,
что бывает трудно установить взаимоотношение 

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

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

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

он очень детализован. Гораздо проще было бы взглянуть на его общую структуру,
отображающую только основные части программы и 

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

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

действия с различных точек зрения. Кроме иллюстрирования структуры программы,
UML имеет немало других полезных возможностей. 

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

Фактически UML можно использовать на всех этапах создания проекта — от разработки
до документирования, тестирования и 

поддержки. Тем не менее не стоит рассматривать UML как средство разработки программного
обеспечения. UML является лишь 

средством для иллюстрирования разрабатываемого проекта. Несмотря на возможность
применения к любому типу языков, UML наиболее 

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

новые средства UML по ходу изложения основного материала рассылки.

        Резюме.

ООП является способом организации программы. Основное внимание при его изучении
уделяется организации программы, а не 

вопросам написания кода. Главным компонентом объектно-ориентированной программы
является объект, содержащий данные и функции 

для их обработки. Класс является формой или образцом для множества сходных между
собой объектов. Механизм наследования 

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

все данные и методы своего родителя, но имеет также и свои собственные. Наследование
делает возможным повторное использование 

кода, то есть включение однажды созданного класса в любые другие программы.

        Основы программирования на C++.

В каждом языке программирования существует основа, без знания которой невозможно
написать даже самой простой программы.
Этот материал не представляет трудности для понимания, однако, как вы, возможно,
заметите, стиль написания программ на языке 

C++ «жестче», чем на BASIC или Pascal. Пока вы в достаточной степени не привыкнете
к такому стилю, программы на C++ могут 

казаться вам по своей строгости сравнимыми с математическими формулами, однако
это ощущение со временем пропадет. Без 

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

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

        Что необходимо для работы.

Как мы уже упоминали в введении, для работы с примерами из нашей рассылки рекомендованы
компиляторы фирм Microsoft и Borland. 

Компиляторы преобразуют исходные коды программ в исполняемые файлы, которые можно
запускать на вашем компьютере, как любые 

другие программы. Исходные файлы представляют собой текстовые файлы с расширением
.СРР, которое используется и в листингах, 

приведенных в этой книге. Исполняемые файлы имеют расширение . ЕХЕ и могут запускаться
как из компилятора, так и 

непосредственно в режиме MS DOS. Программы, исполняемые с помощью компилятора
Microsoft или из MS DOS, не требуют никакого 

дополнительного редактирования. Если же вы используете компилятор фирмы Borland,
то требуется внести небольшие изменения в 

программу перед ее выполнением. О соответствующих действиях мы расскажем в следующей
рассылке.

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

вопросы просим направлять по адресу: support@imperial-company.com
С уважением, технический отдел корпорации "Imperial"


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное