Пример: Глобальная сеть INTERNET
Я ищу:
На главную  |  Добавить в избранное  

Главная/

Программирование, базы данных. /

Разработка програмного обеспечения для работы с базой данных с использованием технологии объектно-ориентарованного програмирования

←предыдущая следующая→  
1 2 3 

>

                                public:       // Публичная часть

void  SetDat(int,int,int);    void    SetDat(int,int,int);

void  SetDat(char *);         void    SetDat(char *);

}                               аа}

void  main()                  void    main()

{                               {

// Опред-ние переменных a,b   // Опред-ние объектов a,b класса dat

dat     a,b;                    dat a,b;

a.day = 5;                    // Непосредственное использование

a.month = 12;                 // приватной части объекта запрещено

bAA.SetDat("12,12,1990");             b.Setdat("12,12,1990");

}                               }

"Приватная" часть  класса  не обязательно должна следовать в начале определения класса.  Для  ее  обозначения  в  произвольном месте  определения  класса  можно  использовать  служебное  слово private.

Tаким образом  в  первом  приближении  класс  отличается  от структуры четко определенным интерфейсом доступа к его элементам.

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

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

     - статические (внешние),  создаваемые в  статической  памяти программы  и существующие в течение всего времени работы программы;

     - автоматические,  создаваемые в стеке в момент вызова функции и уничтожаемые при ее завершении;

     - динамические, создаваемые и уничтожаемые в свободной памяти задачи в моменты вызова функций malloc() и free() или выполнения операторов new и delete.

          Соответственно в программе возможно определение статических, автоматических и динамических объектов одного класса:

class dat

        { ....... }

dat     a,b;            // Статические объекты

dat     *p;             // Ссылка на объект

void    main()

{

dat     c,d;            // Автоматические объекты

p = new dat;            // Динамический объект

...

delete p;               // Уничтожение динамического объекта

} <---------------------// Уничтожение автоматических объектов

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

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

один и имеет имя ~<имя класса>.

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

Момент вызова конструктора и деструктора определяется временем создания и уничтожения объектов:

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

входом в main(), деструктор - после выхода из main(). Конструкторы  вызываются  в порядке опредлеления объектов,  деструкторы - в

обратном порядке;

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

входе в функцию (блок), деструктор - при выходе из него;

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

В Си++ возможно определение  массива  объектов  класса.  При этом  конструктор  и  деструктор  вызываются для каждого элемента массива и не должны иметь параметров.  При  выполнении  оператора delete  для  ссылки на массив объектов необходимо также указывать его размерность. Конструктор для массива объектов должен быть без параметров.


6.     Заключение

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

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

Другая важная концепция ООП - это поддержка повторного использова­ния кода через механизм наследования. Это механизм порождения нового класса от ухе существующего, называемого базовым классом. Базовый класс может расширяться или изменяться для создания производного класса. Таким образом, появляется возможность создавать иерархию родственных типов данных, совместно использующих код.

Множество полезных структур данных являются вариантами друг друга, и обычно утомительно писать для каждой один и тот же код. Производный класс наследует описание базового класса, Затем он может быть изменен до­бавлением дополнительных членов, перегрузкой существующих функций-членов и модификацией привилегий доступа. Без этого механизма повторного использования, каждое незначительное изменение будет требо­вать повторения кода.

Программистские задачи ООП часто более сложны, чем для обычного процедурного программирования, использующего С, так как добавляют, по крайней мере, один дополнительный этап проектирования перед кодировани­ем алгоритмов. Он касается иерархии типов, соответствующей решаемой задаче. При этом часто решаются проблемы более общие, чем' необходимо в конкретном случае. Это приносит дивиденды несколькими путями: решение более инкапсулировано и таким образом лучше и легче поддерживается и изменяется; решение более пригодно для повторного использования. Напри­мер. там, где в коде понадобится стек, его будет легче заимствовать из уже существующего кода. В обычном процедурном языке такая структура данных часто зашита в алгоритм и не может быть экспортирована.

Все эти преимущества особенно важны для реализации больших проектов, которые требуют координации усилий многих программистов. Здесь возмож­ность иметь файлы-заголовки (.h-файлы), описывающие общий интерфейс Для различных классов, позволяют каждому программисту работать над индивидуальными сегментами кода с высокой степенью независимости и надежности.


7. Литература

1.  Фейсон Г. Объектно-ориентированное програмирование на Borland C++. – К.: Диалектика 1996

2.  Пол Ирэ Объектно-ориентированное програмирование с использованием С++. – К.: НИПФ 1995

3.  Буга Г. Объектно-ориентированное програмирование с примерами применения. – М. – Конкорд, 1992


←предыдущая следующая→  
1 2 3 


Copyright © 2005—2007 «RefStore.Ru»