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

Главная/

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

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

←предыдущая  следующая→
1 2 3 4 5 6 7 8 9 10 ... 

ВВЕДЕНИЕ  В  ОБЪЕКТНОЕ ПРОГРАММИРОВАНИЕ

 

Лекция 1. Объектное программирование как технология программирования

-------------------------------------------------------------

     Традиционная технология программирования 70-х годов - структурное программирование:

     - модульное программирование;

     - нисходящее программирование;

     - структурное проектирование процедур и данных (программирование без goto).

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

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

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

отображаемыми программой,  и програмнными объектами, являющимися, по  существу,  структурированными  переменными  (в дальнейшем под термином "объект" будем понимать программный объект).

Традиционный подход:  ----------    переменная      тип данных

Объектно-ориентиро-   физический    программный     класс

ванный подход:        объект        объект          объектов

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

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

     Объектно-ориентированные программы можно разрабатывать  и  с помощью  традиционных языков программирования.  Рассмотрим пример определения объектов типа "дата" на классическом Си.

//------ структура dat - аналог класса объектов "дата" --------typedef struct dat

        {

        unsigned day;

        unsigned month;

        unsigned year;

        }

        DAT;

//----- набор функций для класса объектов "дата" --------------static  int     mm[] = {31,28,31,30,31,30,31,31,30,31,30,31};

//----- Проверка  на корректность -----------------------------int     TestData(p)

DAT     *p;

{

if (p->month ==2 && p->day==29 && p->year %4 ==0) return(1);

if (p->month ==0 || p->month >12 ||

    p->day ==0 || p->day >mm[p->month])

        return(0);

return(1);

}

//------ Следующая дата ----------------------------------------void    NextData(p)

DAT     *p;

{

p->day++;

if (p->day <= mm[p->month]) return;

if (p->month ==2 && p->day==29 && p->year %4 ==0) return;

p->day=1;

p->month++;

if (p->month !=13) return;

p->month=1;

p->year++;

}

//------- Следующая дата через n дней --------------------------void    PlusData(p,n)

DAT     *p;

int     n;

{

while (n-- !=0) NextData(p);

}

//------- Основная программа ---------------------------------

void main()

{

DAT a;

do

        {

        scanf("%d%d%d", &a.day, &a.month, &a.year);

        }

while(TestData(&a) ==0);

PlusData(&a, 17);

}

//--------------------------------------------------------

     Фактически определение класса объектов как типа данных и известного набора функций для выполнения операций  над  переменными этого  типа эквивалентно понятию базового типа данных (БТД) языка программирования.  Единственное отличие класса от БТД заключается в том,  что первый определяется программистом, а второй встроен в определение языка программирования.

     Язык программирования  Си++  представляет  собой  расширение языка Си для программирования объектов и  их  классов.  При  этом использование классов эквивалентно вплоть до синтаксиса использованию базовых типов данных:

   Понятия классического  Си       Понятия Си++

   -------------------------       ----------- БТД:                             Класс:

элемент данных языка, для        определяемая пользователем

которого известно множество      структура, элементы которой

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

                                и множества функций,оперирующих с ним.

--------------------------------------------------------- Переменная:                      Объект:

 область памяти, содержащая      переменная, содержащая

 структуру данных определенного  структуру данных, определенную

 типа.                            как класс.

--------------------------------------------------------- Операция:                        Переопределение операторов:

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

 БТД, к которому относится пере-  вызвана в виде одной из стандарт менная (так операция '+'         ных операций языка Си, которая

 по-разному интерпретируется для  переопределяется, если операндом

 переменных типа int и double).   ее является объект класса, а не

                                  переменная БТД.

    

        Лекция 2. Дополнительные возможности языка  Си++

        -----------------------------------------------

     Ниже рассмотрим средства,  расширяющие классический Си. Хотя

они и не относятся непосредственно к классам,  с их помощью можно

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

программирования.

     2.1. Присваивание структур

     -------------------------     Операция присваивания может быть применена к структурам  одного типа.  В этом случае предполагается их побайтное копирование

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

структуру с именем p,  то результатом операции *p является структура в целом. Таким образом, структура приближается к базовым типам данных в том смысле,  что над ней возможны вышеуказанные операции.  Для  обозначения  структуры  можно также использовать имя

структуры без ключевого слова struct.

struct dat

        { int   day,month,year; }

dat     NextDat(dat x)     // Формальный параметр - структура

{ ...   return(x);   }     // Возвратить структуру как результат

dat     Nextdat1(dat *p)

{ ...   return(*p);  }     // Возврат

←предыдущая  следующая→
1 2 3 4 5 6 7 8 9 10 ... 


Copyright © 2005—2007 «RefStore.Ru»