Файл: Курсовая база торговх точек города.docx

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Программирование

Добавлен: 25.10.2018

Просмотров: 1061

Скачиваний: 12

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.





Введение



Объектно-ориентированное программирование (ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов (либо, в менее известном варианте языков с прототипированием, — прототипов).

Класс — это тип, описывающий устройство объектов. Понятие «класс» подразумевает некоторое поведение и способ представления. Понятие «объект» подразумевает нечто, что обладает определённым поведением и способом представления. Говорят, что объект — это экземпляр класса. Класс можно сравнить с чертежом, согласно которому создаются объекты. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.

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

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

Прототип — это объект-образец, по образу и подобию которого создаются другие объекты.

Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. В момент своего появления (в 1967 году), этот язык программирования предложил поистине революционные идеи: объекты, классы, виртуальные методы и др., однако это всё не было воспринято современниками как нечто грандиозное. Тем не менее, большинство концепций были развиты Аланом Кэйем и Дэном Ингаллсом в языке Smalltalk. Именно он стал первым широко распространённым объектно-ориентированным языком программирования.


ГЛАВА1. КЛАССЫ ОБЩЕГО НАЗНАЧЕНИЯ



В настоящее время количество прикладных языков программирования (список языков), реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. В области системного программирования до сих пор применяется парадигма процедурного программирования, и общепринятым языком программирования является язык C. Хотя при взаимодействии системного и прикладного уровней операционных систем заметное влияние стали оказывать языки объектно-ориентированного программирования. Например, одной из наиболее распространенных библиотек мультиплатформенного программирования является объектно-ориентированная библиотека Qt, написанная на языке C++.

С++ это дальнейшее развитие более раннего языка С. Программа на С++ состоит из объявлений переменных, констант, типов, классов, функций и описаний. Среди функций всегда должна быть одна функция main или WinMain. Именно эти функции выполняются после начала работы программы. Как правило, программа строится по модульному принципу и состоит из множества модулей. Принцип модульности важен для создания надежных и легко модифицируемых программ.

Четкое соблюдение принципов модульности в сочетании с принципом сокрытия информации позволяет внутри любого модуля проводить какие либо модификации, не затрагивая других модулей и основной программы. Например для каждой формы С++ Builder создает отдельный модуль. Согласно принципам сокрытия информации обычно текст модуля разделяют на заголовочный файл интерфейса (*.h ), который содержит объявления классов, функций, переменных и т.д. и файл реализации (*.cpp), в котором содержатся описания функций.

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

  1. Препроцессор преобразует исходный текст.

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

Компоновщик объединяет объектные файлы в единый загрузочный модуль (exe или dll). С++Builder это один из первых инструментов RAD для С++ и один из немногих инструментов RAD который предоставляет возможность программирования в стиле Drag-and-Drop, основанного на компонентах. Первой ступенью эволюции программирования под Windows стало появление языка С++ и его библиотек классов, которые заключали в себе сотни строк кода, необходимых даже для простейшего отображения окна на экране и представлялись в программе на С++ всего несколькими строчками.

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


Наиболее популярными системами, основанными на каркасах, являлись библиотеки классов MFC (Microsoft) и OWL (Borland). Причём Microsoft уже практически отказалась от усовершенствования MFC в пользу технологий основанных на компонентах ActiveX и COM. Компоненты это строительные блоки для приложений, которые можно объединять для достижения нужных целей. Причем сами по себе компоненты никакой структуры не навязывают. В С++ Builder работа с компонентами организована очень хорошо, во многом благодаря тому, что сам он построен на компонентах. Есть ещё один аспект, на который необходимо обратить внимание: в С++Builder зашита невероятно мощная и чрезвычайно гибкая среда программирования баз данных.

По сути дела это первая среда программирования баз данных для C++. Интерфейс с базами данных во многих других системах С++ состоит из набора объектов которые являются лишь тонкими оболочками скрывающими под собой низкоуровневые функции баз данных. Для таких объектов обычно требуются десятки параметров для открытия и присоединения к базе данных. Это не сравнится с полным набором drag-and-drop компонентов баз данных, встроенных в систему С++Builder. Эта среда содержит полный набор управляющих элементов для работы с данными, которые вообще не требуют программирования. Можно написать вполне законченный редактор баз данных не написав ни единой строчки кода на С++.

Таким образом С++Builder это законченный гибкий инструмент RAD, предоставляющий высочайшие возможности в работе с базами данных, основанный на компонентах, содержащий в себе компилятор стандарта ANSI C++ при полной поддержке новых технологий и библиотеку стандартных шаблонов STL. Кроме того, в наличии практически полная совместимость с приложениями Delphi, возможность компиляции приложений Visual C++ и приложений созданных на основе OWL, так как в Builder входят библиотеки MFC и OWL.

Первый и самый важный класс в иерархии VCl это TObject – предок всех классов VCL, он содержит некоторые важнейшие методы для этих классов. Тем не менее, он не содержит никаких собственных свойств. Важнейшими методами являются ClassName, который возвращает настоящее имя класса объекта, ClassParent – возвращает непосредственного родителя данного класса, Dispatch – отвечает за передачу сообщений в обработчики определенные для объекта. Следующий по важности класс это TControl – который, является базой для всех управляющих элементов VCL, например форм, полей ввода, окон диалога. TControl относится только к видимым компонентам в системе. Здесь находятся такие свойства как Height, Width, ClientHeight, ClientWidth, Hint, Cursor и другие. Методами класса являются Hide – убрать, Show – показать, Update – обновить, Perform – исполнять. Метод WndProc – обрабатывает специфические сообщения. Еще одним важным классом является TComponent, который представляет все компоненты в системе. Этот класс предоставляет средства для добавления компонента в палитру, возможность компоненту содержать другие компоненты, возможность работы с потоками и файлами. TComponent включает в себя все компоненты видимые и невидимые во время работы приложения. Свойство ComponentCount – количество компонентов, которое содержит данный компонент, Components – содержит указатели на все компоненты, содержащиеся в данном и ComponentState – текущее состояние компонента. Компоненты можно создавать динамически. Для этого есть два способа: помещаете на форму компонент и устанавливаете его свойство Visible в false, а во время работы приложения, когда вам нужно устанавливаете Visible в True, и он становится видимым. Другой способ состоит в изменении заголовочного файла формы, чтобы он содержал описания компонент, которые мы будем создавать: в описание класса формы в разделе private или public необходимо добавить указатели на нужные компоненты. Например, TEdit *pedit – будет использоваться для создания текстового поля. Собственно создание компонента происходит через оператор new, так сделано из-за того, что первоначально VCL была написана на Pascal.


Для динамического создания, в каком-нибудь обработчике пишется текст:
pedit = new TEdit(this);
pedit->Parent = this; //владельцем будет текущий объект (форма)
pedit->Height = 20; //высота
pedit->Width = 200; //ширина
pedit->Visible = true; //видимость

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

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

Первая трудность использования массива записей в том, что они должны объявляться максимальным размером, например 360, в то время как реально в конкретном случае используется 10, 50 или 100. Это значительная потеря памяти. Вторая трудность - массив записей может хранить записи только одного типа. Одно из решений этих проблем состоит в использовании объекта класса Tlist.

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

Tlist имеет всего 4 свойства:

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

Items[Index: integer]: Pointer - возвращает указатель из элемента списка по заданному индексу.

Count: integer - число элементов в списке.

Capacity - максимальное число элементов списка, которое увеличивается автоматически на 16, когда Count>= Capacity, или устанавливается явно программистом.

Для работы со списком используются методы Add, Delete, Insert, Remove, Move, and Exchange. Для нахождения индекса требуемого указателя используется метод IndexOf. Все, что нужно для работы со списком, это объявить переменную или поле класса Tlist, создать ее методом Create и в конце не забыть освободить память методом Free. При создании объекта Tlist выделяется память только для Capacity указателей, но не резервируется место для хранимых в нем объектов. Ниже дан пример работы с классом Tlist.

procedure TForm1.FormActivate(Sender: TObject);

type

PMyList = ^AList;

AList = record

I: Integer;

C: Char;

end;

var

MyList: TList;

ARecord: PMyList;

B: Byte;

Y: Word;

begin

MyList := TList.Create;

New(ARecord);

ARecord.I := 100; ARecord.C := 'Z';

MyList.Add(ARecord); {Add integer 100 and character Z to list}

New(ARecord);

ARecord.I := 200; ARecord.C := 'X';

MyList.Add(ARecord); {Add integer 200 and character X to list}

Y := 10; {Variable used in TextOut function}

{Go through the list until the end is reached}

for B := 0 to (MyList.Count - 1) do

begin

Y := Y + 30; {Increment Y Value}

ARecord := MyList.Items[B];

Canvas.TextOut(10, Y, IntToStr(ARecord^.I)); {Display I}

Y := Y + 30; {Increment Y Value again}

Canvas.TextOut(10, Y, ARecord^.C); {Display C}

end;

MyList.Free;

end;

Везде и всюду используются списки строк типа TStrings, представляющих пользователю ясный и последовательный способ управления списками строк. Но здесь есть подводный камень, поскольку существуют два близких класса TStrings и его потомок TStringList. Первый является абстрактным классом, определяющим все функции, необходимые для манипулирования списком строк, но он не обеспечивает механизмов для хранения списка строк. Хранилище строк обеспечивают его потомки типа TStringList, TMemoStrings, TListBoxStrings и т.д., из числа которых вам как программисту предоставлен только тип TStringList; другие типы вшиты в соответствующие компоненты.