Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Применение объектно-ориентированного подхода при проектировании информационной системы

Содержание:

Введение

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

Объектно-ориентированный язык программирования - язык, построенный на принципах объектно-ориентированного программирования. В основе концепции объектно-ориентированного программирования лежит понятие объекта - некой сущности, которая объединяет в себе поля (данные) и методы (выполняемые объектом действия).

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

В современных объектно-ориентированных языках используются механизмы:

– наследование. Создание нового класса объектов путём добавления новых элементов (методов). Некоторые ОО языки позволяют выполнять множественное наследование, то есть объединять в одном классе возможности нескольких других классов;

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

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

К объектно-ориентированным языкам программирования относятся следующие: C#; C++; F#; Java; Delphi; Eiffel; Simula; D; Io; Objective-C; Swift; Object Pascal; VB.NET; Visual DataFlex; Perl; PowerBuilder; Python; Scala; ActionScript (3.0); Dylan; JavaScript; JScript .NET; Ruby; Smalltalk; Ada; Xbase++; X++; Vala; PHP; Cyclone.

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

Объект исследования – проектирование информационных систем.

Предмет исследования – объектно-ориентированный подход проектирвоания.

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

В соответствии с целью была определена необходимость постановки и решения следующих задач:

– дать общую объектно-ориентированному подходу;

– описать работу с конструктором класса;

– описать операции над объектами;

– изучить особенности объектно-ориентированного языков программирования С#, C++, Java, Delphi.

Глава 1. Объектно-ориентированный подход при проектировании информационных систем

1.1. Характеристика объектно-ориентированного подхода

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

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

Управляемость для иерархических систем предполагает минимизацию избыточности данных и их целостность, поэтому созданное удобно управляемым – будет и удобно пониматься. Таким образом, через тактическую задачу управляемости решается стратегическая задача – транслировать понимание задачи программистом в наиболее удобную для дальнейшего использования форму [3].

Основные принципы структурирования в случае ООП связаны с различными аспектами базового понимания предметной задачи, которое требуется для оптимального управления соответствующей моделью:

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

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

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

– полиморфизм для определения точки, в которой единое управление лучше распараллелить или наоборот – собрать воедино.

1.2. Конструирование класса

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

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

Вместе с тем, это налагает на разработчиков программ дополнительные обязанности, например, записывать непосредственный вызов этих функций для каждого вновь определяемого информационного объекта. Преодолеть это неудобство в С++ можно достаточно просто, по средствам использования конструкторов классов. Для некоторого класса конструктор – представляет собой функцию, которая является его членом и имеет имя, которое совпадает с именем самого класса, а также не содержащий типа возвращаемого значения [4]. Структура типового класса представлена в Приложении.

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

class Vectorss{

int A[14], B[17], C[19];

public:

Vectorss ( );

void VectorssSum ( Vectorss *, Vectorss * );

// Добавление других методов

};

Vectorss::Vectorss( )

{

memsets ( A, 0, 25);

memsets ( B, 0, 25);

memsets ( C, 0, 25);

}

void main( )

{

Vectorss Firsts; // В этом месте будут вызваны

Vectorss Seconds; // конструкторы для Firsts и Seconds.

// Другие ператоры программы

}

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

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

class Dates{

int Month, Day, Year;

public:

Dates (double , double, double);

void GetDates( );

};

Dates::Dates (double M, double D, double Y )

{

Month = M; Day = D; Year = Y;

}

void main( )

{

Dates MemDays( 10, 15, 1993 ); // Обязательная инициализация

Dates NewDates = MemDays; // иначе :

Dates Anothers; // Ошибка !

// Другие операторы программы

}

Ограничением практического использования конструктора является запрет использования его имени в качестве явного аргумента внутри самого этого класса:

class Vectors{

int Vect[5];

Vectors V; // Ошибка

public:

Vectors ( Vectors ); // Ошибка

// Другие методы программы

};

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

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

#include "iostream.h"

class X{

public:

char *PointXs;

X ( ) { cout << "Объявление объекта класса X!";

PointXs = (char* 0);

}; // X( ) - конструктор по умолчанию

};

X NewXs;

void main( )

{

cout << "Конец работы программы";

}

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

Объявлен объект класса Х!

Конец работы.

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

class Intgs {

char Numbers[5];// Число можно хранить символьно

int NN;// ИN целым типом

public:

Intg ( char *Strs ) {// Конструктор для 1-го случая

if ( strlen(Strs) > 5 ) cout<< "Превышение размера числа";

else strcpy( Numbers, Strs );

};

Intg ( double L ) { N = L }; // Конструктор для второго случая

};

void main( )

{

Intg Firsts ( "258" ); // Вызов первого конструктора

Intg Seconds ( 258 ); // Вызов второго конструктора

// Другие операторы программы

}

Следующий класс позволяет продемонстрировать инициализацию конструктором и прямым обращением к пользовательскому классу:

class Boxe {

public:

Boxe(int width, int length, int height){

m_width = width;

m_length = length;

m_height = height;

}

private:

int m_width;

int m_length;

int m_height;

};

class SomeClass{

public:

static void set_box(const Boxe& aBoxe) {}

};

int main(){

Boxe box1(4, 2, 3);

Boxe box2{ 5, 3, 4 };

SomeClass::set_box(Boxe{ 6, 6, 7 });

}

1.3. Операции над объектами

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

Как правило, в объектных и объектно-ориентированных языках операции, которые выполняются над данным объектом, называются методами и входят составной частью в определение класса. Из практики известно несколько основных видов операций над объектами:

1) Модификатор представляет собой операцию, которая изменяет состояние объекта путем записи или доступа.

2) Селектор - операция, дающая доступ для определения состояния объекта без его изменения (операция чтения).

3) Итератор представляет собой операцию доступа к содержанию объекта по частям (в определенной последовательности).

4) Конструктор представляет собой операцию создания и (или) инициализация объекта.

5) Деструктор представляет собой операцию разрушения объекта и (или) освобождение занимаемой им памяти [5].

Например, операция ссылки «&» в базовом языке С использовалась для взятия адреса объекта. В С++ расширены возможности операции ссылки. При этом появилась новая концепция ссылки в операторах объявления. Рассмотрим пример.

int Handle;

int *New = &Handle;

int &Next = Handle;

В этом примере переменная Next не является указателем на тип int, а носит название ссылки на объект типа int. Эта переменная должна быть проинициализирована при ее объявлении. Далее в программе она становится некоторым синонимом объекта Handle для использования этого объекта как единого целого. В общем случае можно определить ссылки и на более сложные объекты, например, структуры или объекты классов. Для приведенного примера следующие два оператора будут эквивалентными:

// Ранее, например, было определено int First = 0;

*New = First; Next = First;

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

struct R1 {

char L1[22];

int Number;

};

struct R1 Firsts, Seconds;

struct R1 &New = Seconds;

void main( )

{

Firsts. Number = 22;

New = Firsts; // Скопируется вся структура

}

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

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

class MyOwns {

int Lengt;

public:

MyOwns ( int L ) { Lengt = L };

MyOwns ( MyOwns& );

};

MyOwns::MyOwns( MyOwns& Olds )

{

Lengt = Olds.Lengt;

}

Глава 2. Объектно-ориентированные языки программирования

2.1. Основные сведения о языке программирования С# и C++

Язык программирования C# представляет собой объектно-ориентированный язык программирования, который был разработан в 1998-2001 годах группой инженеров при постоянном руководстве Андерса Хейлсберга в компании Microsoft как язык программирования для выполнения разработки приложений под платформу от корпорации Microsoft .NET Framework и впоследствии был стандартизирован как ECMA-334 и стандарт ISO/IEC 23270.

Объектно-ориентированный язык программирования C# можно отнести к семейству языков программирования которые имеют C-подобный синтаксис, из них его внутренний синтаксис является наиболее приближенным к языку программирования C++ и Java. Язык программирования C# включает полиморфизм, поддерживает механизм статической типизации, перегрузку используемых операторов, атрибуты, свойства, делегаты, итераторы, обобщённые типы и методы, анонимные функции, поддерживающие замыкания, LINQ, различные исключения, комментарии в формате XML.

Переняв многое от своих предшественников - языков C++, Pascal, Модула, Smalltalk и, в особенности, Java - С#, опираясь на практику их практического использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# в отличие от C++ не поддерживает множественное наследование классов [3].

C++ – компилируемый, статически типизированный язык программирования общего назначения. Поддерживает такие парадигмы программирования, как процедурное программирование, объектно-ориентированное программирование, обобщённое программирование. Язык имеет богатую стандартную библиотеку, которая включает в себя распространённые контейнеры и алгоритмы, ввод-вывод, регулярные выражения, поддержку многопоточности и другие возможности. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником – языком C, – наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.

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

Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие. C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C# [2].

C# был разработан в качестве языка программирования прикладного уровня для CLR и, который зависит от возможностей самой CLR. Это касается системы использования типов данных языка программирования C#, которая отражает BCL. Отсутствие или присутствие тех или иных особенностей языка программирования диктуется тем, что может ли языковая особенность языка программирования быть транслирована в конструкции CLR [5].

На протяжении разработки языка C# было выпущено несколько его версий, рис. 1.

Таким образом, с развитием CLR от версии 1.1 к версии 2.0 достаточно сильно обогатился и сам язык программирования C#; подобного взаимодействия можно было ожидать и в дальнейших версиях языка программирования (однако, эта закономерность была нарушена с выходом языка C# 3.0, который представляет собой расширение языка, которое не опирается на расширения платформы технологии .NET). CLR предоставляет C#, как и всем другим .NET-ориентированным языкам, большинство возможностей, которых не имеют «классические» языки программирования.

Рисунок 1. Версии языка программирования C#

Например, выполнение сборка мусора не была реализована в самом языке C#, а выполняется CLR для программ, которые написаны на языке C# точно так же, как это выполняется для программ на языке VB.NET, J# и др.

Существует несколько реализаций объектно-ориентированного языка программирования C#:

– проект Mono включает в себя реализацию языка программирования C# с открытым исходным кодом;

– проект DotGNU также включает компилятор языка программирования C# с открытым кодом;

– реализация языка программирования C# в виде компилятора csc.exe была включена в состав платформы .NET Framework (включая .NET Micro Framework, .NET Compact Framework);

– в составе проекта Rotor компании Microsoft;

– проект dotNetAnywhere ориентирован на встраиваемые системы, реализация CLR, выполняется поддержку практически всех спецификаций языка программирования C# 2.0 [4].

Таким образом, объектно-ориентированный язык программирования С# имеет множество особенностей, однако он во многом схож с языком программирования Java.

2.2. Отличия языков программирования C# и Java

Языки программирования C# и Java используют в качестве синтаксической основы язык программирования C. В частности, от него были унаследованы без каких-либо серьезных изменений:

– использование синтаксиса описания и использования внутренних переменных и специальных функций (порядок «тип имя», использование специализированных модификаторов, обязательным условием является наличие скобок для функций, описания формальных параметров);

– использование обозначений начала и конца блоков разрабатываемого программного кода фигурными скобками;

– использование различных обозначений, ассоциативности и приоритета основных встроенных операций, к которым можно отнести побитовые, логические операции, присвоение, арифметические, операции декремента и инкремента, тернарная условная операция «?:»);

– синтаксис всех основных конструкций: циклов, встроенных оператора множественного выбора, условного оператора выбора [10].

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

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

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

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

И в языке программирования Java, и в C# есть сильные и слабые ссылки на объекты. Оба языка поддерживают методы-финализаторы. Из-за неопределённости момента удаления объекта финализаторы не могут использоваться для освобождения системных ресурсов, занятых объектом, что вынуждает создавать дополнительные методы для «очистки» объекта и вызывать их явно [6].

Язык программирования Java позволяет выполнить регистрацию слушателей (listener), которые будут получать определенные информационные сообщения, когда ссылка будет подвергнута операции сборки мусора, что обеспечивает улучшение производительности WeakHashMaps.

Язык программирования C# позволяет выполнить отмену использования различных специальных финализаторов для некоторых обрабатываемых объектов специальным методом GC.SuppressFinalizes(obj) (напр., выполнение конструирования запросов SQL на файловом потоке). Это может понадобиться для выполнения процессов финализации и считается довольно дорогой операцией в процессе непосредственного выполнения сборки мусора.

Язык программирования C# в стандартной библиотеке содержит интерфейс IDisposables и специальную конструкцию using, которая гарантирует выполнение своевременного вызова необходимых метода очистки.

Объектные средства языков программирования C# и Java можно обозначить по следующим основным характеристикам: инкапсуляция; внутренние классы; методы. Рассмотрим более подробно каждую характеристику.

Инкапсуляция.

В языке программирования Java модификатор protected в описании, помимо выполнения доступа из классов-потомков, разрешается доступ из всех классов, которые входят в тот же пакет, что и класс-владелец.

В C# для объектов, которые должны быть видны в пределах сборки введён специальный модификатор internal (аналог default в языке программирования Java), а protected позволяет сохранить свой изначальный смысл, который был взят из языка программирования C++ - доступ выполняется только из классов-потомков [21].

Допускается выполнять некоторую комбинацию методов доступа к членам класса protected и internal в этом случае получается область доступа, которая соответствует типу доступа protected в языке программирования Java.

Внутренние классы.

Оба языка обеспечивают определение класса внутри пользовательского класса. В языке программирования Java внутренние классы могут быть использованы для эмуляции замыканий. Внутренние классы языка программирования Java имеют доступ к нестатическим членам родительского класса, то есть «знают о this»; кроме того, внутри методов может быть определены локальные классы, которые имеют доступ чтения ко всем локальным переменным, и безымянным локальным классам, которые фактически обеспечивают создание экземпляров объектов и интерфейсов, которые позволяют перекрывать методы своего класса, в месте их использования [9].

На данном механизме в Java-программе мжет быть выполнена обработка различных событий (событие позволяет сгенерировать вызовы методов, в исходном классе-обработчике который является абстрактным; там, где нужен определенный обработчик для событий, программисты создают экземпляры анонимного локального класса, который является наследником базового класса-обработчика и непосредственно может быть использован) [18].

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

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

В языке программирования Java начиная с 8 версии также появились лямбда выражения.

Методы.

В обоих языках методы могут быть определены через функции классов. Тело метода может быть расположено внутри описания определенного класса. Также, поддерживаются языками программировния C# и Java абстрактные методы и статические методы. В C# представлены механизмы явной реализации методов интерфейса, что обеспечивает классам реализовывать методы интерфейса отдельно от собственных методов или давать разные реализации одноимённых методов, которые принадлежат различным интерфейсам [12].

В объектно-ориентированном языке программирования Java базовые типы (byte, int, double, float, bool и пр.) могут быть переданы по значению, а для остальных (объектные) по значению может быть передана ссылка на необходимый объект.

В C# запрещено давать методам название, которое совпадает с названием некоторого класса, что позволяет устранить ошибки (в Java программисты могут определять конструктор, который будет на самом деле являться методом) [7].

В языке программирования C# в дополнение к примитивным типам можно передавать по значению структуры (struct), остальные типы могут быть переданы по ссылке. В объектно-ориентированном языке программирования C# поддерживается явное описание выполнения передачи необходимых параметров по ссылке с использованием ключевых слов out и ref. В процессе использования out компилятор выполняет контроль наличия в методе присваивания определенных значений. Использовать их необходимо при работе с неуправляемым кодом, который это требует (например, Winapi), так как это нарушает концепцию объектно-ориентированного программирования.

2.3. Язык программирования Delphi

Delphi (Делфи, произносится /ˈdɛlˌfi:/) - императивный, структурированный, объектно-ориентированный язык программирования со строгой статической типизацией переменных. Основная область использования - написание прикладного программного обеспечения.

Первоначально носил название Object Pascal и исторически восходит к одноимённому диалекту языка, разработанному в фирме Apple в 1986 году группой Ларри Теслера [20]. Однако в настоящее время термин Object Pascal чаще всего употребляется в значении языка среды программирования Delphi. Начиная с Delphi 7, в официальных документах Borland стала использовать название Delphi для обозначения языка Object Pascal.

Delphi 7 представляет собой среду, предназначенную для визуального проектирования приложений для Windows с развитыми механизмами повторного использования программного кода. У Delphi, как и у многих других крупных компаний, есть конкуренты. Им является всем знакомая среда разработки Microsoft Visual C++, которая имеет свои преимущества и недостатки, но являющаяся более популярной, в основном, из-за того, что была разработана именно фирмой Microsoft.

Отличительной чертой Delphi является модель компонентной разработки программных продуктов. Суть модели заключается в поддержке системного постоянно расширяемого набора объектных компонентов, из которых строится сама программа. В Delphi Компоненты очень просты для развития и использования. Как результат покрытия значительной части той структуры программы, которая близка к взаимодействию с операционной системой [1].

Интегрированная среда разработки Turbо Dеlphi была разработана компанией CоdeGеar, которая ориентирована на студентов, частных пользователей и начинающих программистов. Данная среда разработки основана на языке программирования Dеlphi. Основным отличием данного программного продукта является бесплатная версия компилятора Turbо Dеlphi Explоrer.

Среда разработки Dеlphi – одна из первых систем, которая занялась быстрой разработкой приложений (RАD) и технологию визуального конструирования. Технология Visuаl Dеsign содержит готовые компоненты, из которых будет строится интерфейс будущей программы.

Меню представляет из себя быстрый и гибкий интерфейс для среды разработки Delphi, может управляться по набору горячих клавиш. Это удобно потому, что здесь используются слова или короткие фразы, которые более точные и понятные, чем иконки или пиктограммы. Также можно использовать меню для выполнения широкого круга задач; наиболее общих задач вроде управления отладчиком, открытия и закрытия файлов или настройкой среды программирования [16].

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

Pаrаdох – является одной из редчайших программ, которые в одинаковой степени обращены как к квалифицированным, так и к начинающим пользователям. Своими успехами Paradox отчасти обязан способу представления задач работы с базами данных. Вместо традиционного изображения отдельных полей и записей на экране видно таблицу – в виде строк и столбцов.

Несмотря на относительно невысокую общую оценку пользовательских свойств Pаrаdох, средства помощи в этом пакете выполнены отлично. Новые эксперты облегчают создание БД. Эксперт по базам данных создаёт все приложения. Включая таблицы, отчеты и формы. Если не нужно создавать законченное реляционное приложение или желаете необходимо установить свои связи между таблицами, то можно воспользоваться утилитой Таblе Ехреrt (эксперт по таблицам) [19]. Эта программа предлагает большой набор шаблонов для использования не только в личных, но и в деловых целях. В ряду других новых полезных средств – Эксперт диаграмм (Сhаrt Еxреrt), Эксперт почтовых отправлений (Маil Меrgе Ехреrt), работающий с редакторами Wоrd и Wоrd Pеrfесt, и Эксперт импортирования текстовых файлов (Теxt Imроrt Ехреrt) [2].

Система управления базами данных Microsoft Access (СУБД) включает все необходимые инструментальные средства для создания локальной базы данных, общей БД в локальной сети с файловым сервером или создания приложения пользователя, работающего с БД на SQL- сервере. Access входит в состав Microsoft Office, что делает его интерфейс знакомым и привычным, а следовательно облегчает работу.

Заключение

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

Были описаны конструктор и деструктор являются специальными функциями класса, автоматически вызываемые при создании, уничтожении определенного объекта. В большинстве случаев программы используют конструктор для выполнения инициализации элементов класса. Конструктор является специальной функцией, автоматически вызываемой при создании объекта. У конструктора идентичное имя с классом. Деструктор является специальной функцией, автоматически вызываемой при уничтожении объекта. У деструктора идентичное имя с классом, но его имя предваряется символом тильды (~).

Возможности современных объектно-ориентированных языков программирования высокого уровня позволяют реализовать практически любую задачу. Языки программирования используют все новые и новые функции и проведенный анализ в данной работе позволит определить, в сравнении, особенности следующих языков программирования: C#; Java; C++; Delphi.

C# был разработан как язык программирования прикладного уровня для CLR и, как таковой, зависящий от возможностей самой CLR. Это касается системы типов C#, которая отражает BCL. Существует несколько реализаций объектно-ориентированного языка программирования C#: проект Mono включает в себя реализацию языка программирования C# с открытым исходным кодом; проект DotGNU также включает компилятор языка программирования C# с открытым кодом; реализация языка программирования C# в виде компилятора csc.exe была включена в состав платформы .NET Framework.

Анализируя отличия языка программирования C# от Java было установлено, что в языке программирования C# в дополнение к примитивным типам передаются по значению структуры (struct), остальные типы передаются по ссылке. В обоих языках программирования методы определяются через функции класса. Тело метода располагается внутри описания класса.

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

К основным особенностям среды разработки Тurbо Dеlрhi можно отнести следующее: поддержка сразу нескольких языков программирования высокого уровня, визуальное создание прикладных программ, использование уже готовых компонентов для будущих программ, введение множества технологий, ускоряющих и облегчающих написание программ возможность создания программ под разные платформы.

Список использованной литературы

  1. Архангельский А.Я. Программирование в С++ Builder. 2-е изд. – М.: ООО «Бином-Пресса», 2009. – 1259 с.

/*

Администратор отеля. Список номеров: класс, число мест. Список гостей:

паспортные данные, даты приезда и отъезда, номер. Во поселок гостей: выбор

соответствующего номера (при наличии свободных мест), регистрация, оформление

квитанции. Отъезд: выбор всех посто - Яльцев, отъезжающих сегодня,

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

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

признаку.

переменные класса gotel

klas - класс номера

kilkist_mest - количество мест

cena - цена

data_viseleniya - дата выселения

informaciya_o_julce - информация о жильце

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

для работы с векторами, библиотка ввода-вывода, библиотка

работы со строками, библиотека для работы с visual C++.

*/

//#include <vcl.h>

#include <stdafx.h>

#include <iostream>

#include <string>

#include <typeinfo>

#include <iomanip>

#include <vector>

#pragma warning (disable:4996)

using namespace std;

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

/*

Определение класса gotel

Определение типа доступа публичный.

Переменная типа инт и переменные типа строка string.

Определение метода вывода данных, определение метода

автоматического ввода информации void in_gotel и определение

метода получения доступа к приватным переменным класса gotel

string _data_viseleniya().

*/

class gotel

{

public:

string klas;

string kilkist_mest;

string cena;

string data_viseleniya;

string informaciya_o_julce;

public:

void gotel_data() const

{

cout << "\n Klass:" << klas;

cout << "\n Kilkist mest:" << kilkist_mest;

cout << "\n Cena:" << cena;

cout << "\n Data viseleniya:" << data_viseleniya;

cout << "\n Informaciya o julce:" << informaciya_o_julce;

}

void in_gotel(string klass, string kilkist_mests,

string cenas, string data_viseleniyas, string informaciya_o_julces)

{

klas = klass;

kilkist_mest = kilkist_mests;

cena = cenas;

data_viseleniya = data_viseleniyas;

informaciya_o_julce = informaciya_o_julces;

}

string _data_viseleniya()

{

return(data_viseleniya);

};

};

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

/*

меню программы, int vubor служит для выбора варианта меню,

после отчистка экрана перед выводом, выравние по левому краю

setiosflags(ios::left), выделение символов для записи 22 символа

setw(22), считывание переменной с клавиатуры cin >> vubor,

возвращение переменной из функции return vubor

*/

// вводим матрицу для вычисления кратчайшего пути и его длины

int m[P][P];

// вводим матрицу для нахождения всех возможных путей между данными

// вершинами в графе не пеpесекающиеся по pебpам

int v[P][P];

int D[P], G[P][P], W[P][P],Z[P];

int N,M,S,F;

int a,b,c;

int i,j,k,l,h,f;

// тело функции для нахождения кратчайшего пути между вершинами в графе

void GRAF (int m[P][P]) {

// в том случае, если путь существует

if (D[F]<MAX) {

printf("\ndlinna puti ot %d uzla do %d uzla = ",S,F);

// выводим полученную длину пути

printf("%d \n",D[F]);

printf("put' megdu %d u %d vershinami : ",S,F);

i=1;

Z[0]=F;

// в массив Z записываем вершины, через которые проходит путь,

// в обратном порядке (от конечной к начальной вершине)

while ( G[F][2] !=0 ) {

Z[i]=G[F][2];

i++;

G[F][2]=G[G[F][2]][2];

}

Z[i]=S;

// выводим вершины, через которые проходит путь, в правильном порядке

for (j=i ; j>=0 ;j--)

printf(" %d",Z[j]);

}

// если пути нет, тогда

else {

printf("\nputi net\n\n\n");

return;

}

for (i=1 ; i<=N ; i++ )

// массив, содержащий расстояния от заданной вершины до всех остальных

D[i] = m[S][i];

D[S] = 0 ;

for (j=1; j<=2 ; j++) {

// матрица, для хранения пути из заданной вершины до всех остальных

G[j][1]=S;

G[S][j]=0;

}

// реализация алгоритма Форда-Беллмана

for (h=1 ; h<=N ;h++) {

i=0;

for (j=2 ; j<=N ; j++) {

for (k=1 ; k<=N ; k++) {

if (D[k] > D[j]+m[j][k])

D[k]=D[j]+m[j][k] ;

i++;

// преобразуем массив расстояний в матрицу

for (l=2 ; l<=N ; l++) {

// (i-ая строка матрицы - массив расстояний на i-ом шаге)

W[i][l]=D[l];

// отслеживаем улучшение пути

if (W[i][l]<W[i-1][l])

// запоминаем вершину через которую проходит данный путь

G[k][2]=j ;

}

}

}

}

// вывод новой строки

printf("\n");

// в том случае, если путь существует

if (D[F]<MAX) {

printf("\ndlinna puti ot %d uzla do %d uzla = ",S,F);

// выводим полученную длину пути

printf("%d \n",D[F]);

printf("put' megdu %d u %d vershinami : ",S,F);

i=1;

Z[0]=F;

// в массив Z записываем вершины, через которые проходит путь,

// в обратном порядке (от конечной к начальной вершине)

while ( G[F][2] !=0 ) {

Z[i]=G[F][2];

i++;

G[F][2]=G[G[F][2]][2];

}

Z[i]=S;

// выводим вершины, через которые проходит путь, в правильном порядке

for (j=i ; j>=0 ;j--)

printf(" %d",Z[j]);

}

// если пути нет, тогда

else {

printf("\nputi net\n\n\n");

return;

}

return;

}

// функция нахождения всех возможных путей между данными вершинами

// в графе не пеpесекающиеся по pебpам

void PYTU () {

// пока путь существует ...

while (D[F]<MAX) {

// вызываем функцию нахождения кратчайшего расстояния для нашего графа

// без учета весов рёбер (все ребра имеют вес = 1)

GRAF(v);

for (j=0 ; j<M ; j++)

// пройденные ребра удаляем (ставим вес = бесконечности)

v[Z[j+1]][Z[j]]=MAX;

}

return;

}

// тело главной функции программы

int main () {

// выполняем очистку экрана

//clrscr();

char fileName[256];

FILE *inp;

printf("Vvedite imya faila : ");

scanf("%s", fileName);

printf("\n");

// открываем файл на чтение

inp=fopen(fileName, "r");

// читаем из файла первую строку, которая содержит

// число вершин N и число ребер M

fscanf (inp,"%d %d",&N,&M);

// присваиваем элементам обоих матриц максимальные значения

for ( i=1 ; i<=N ; i++)

for ( j=1 ; j<=N ; j++) {

m[i][j]=MAX;

v[i][j]=MAX;

}

// читаем из файла остальные M строк,

for (i=1 ;i<=M ;i++ ) {

// содержащие описание ребер (Пример строки файла :" 1 3 6 ":

// значит что ребро из вершины 1 в вершину 3 имеет вес 6)

fscanf(inp,"%d %d %d",&a,&b,&c);

// Заполняем матрицу смежностей для нашего графа , учитывая вес ребра

m[a][b]=c;

// если граф неориентированный, убираем метку

// m[b][a]=1;

// заполняес матрицу смежностей без учёта веса рёбер

v[a][b]=1;

}

// закрываем файл

fclose(inp);

printf("\n");

// пример : " 1 7 " : 1 - начало , 7 - конец пути

printf("Vvedite nachalo i konec puti : ");

scanf ("%d %d",&S,&F);

printf("\nVse puti ne perecekautcya po rebram : \n");

PYTU();

printf("Min put' i ego dlinna : ");

GRAF(m);

int my_menu()

{

setlocale(0, "");

int vubor;

system("cls");

cout << "********************************************************************************";

cout << "********************************************************************************";

cout << "********************************************************************************\n" << endl;

cout << "\t\t\t ***** Сделайте выбор *****\n" << endl;

cout << "********************************************************************************";

cout << "********************************************************************************";

cout << "********************************************************************************\n" << endl;

cout << setiosflags(ios::left) << endl

<< setw(22) << "\t\t 1. Показать весь список\n"

<< setw(22) << "\t\t 2. Произвести поиск по дате выселения\n"

<< setw(22) << "\t\t 3. Выход\n" << endl;

cout << ">>>";

cin >> vubor;

return vubor;

}

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

/*

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

int case_1(vector<gotel*> const&v) передает значение

вектора в функцию, далее отчистка экрана и вывод заголовка

cout << endl << "Sodergimoe bazu" << endl, далее производится

перебор значений вектора в цикле for,при удовлетворении условию

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

*/

int case_1(vector<gotel*> const&v)

{

system("cls");

cout << endl << "Sodergimoe bazu" << endl;

for (size_t j = 0; j<v.size(); j++)

{

v[j]->gotel_data();

}

return 0;

}

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

/*

Функция поиска по наименованию товара, в начале объявлется константа

SIZE,после обїявляется переменная naim для организации условия,

віводится заголовок cout << "Vvedite naimenyvannya:" << endl,

помещается строка в поток, производится перебор значений вектора в цикле

for, при условии если поле == введенному значению, тогда выводится запись

с этим наиминованием. вывод записи вектора удовлетворяющее услвоию оператора

if v[j]->gotel_data(), отчистка памяти return 0.

*/

int case_2(vector <gotel*> const& v)

{

const int SIZE = 30;

char naim[SIZE];

cout << endl << "Poisk:" << endl;

cout << "Vvedite datu:" << endl;

gets(naim);

cin.getline(naim, SIZE);

for (unsigned j = 0; j < v.size(); j++)

if (v[j]->_data_viseleniya() == naim)

{

v[j]->gotel_data();

}

return 0;

}

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

/*

Главная функция программы. Здесь происходит вход в программу, а так же

объявление переменных собственного типа

gotel g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15

Так же присваиваются первоначальные данные созданным

параметрам типа baza. Записывются данные в вектор, обрабатывается

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

После чего происходит отчистка выделеной памяти.

*/

int main()

{

gotel g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15;

int p = 0;

char x = 'y';

g1.in_gotel("lux", "3", "1432", "22.04.2014", "spokoyniy");

g2.in_gotel("lux", "3", "1433", "23.04.2014", "spokoyniy");

g3.in_gotel("lux", "4", "1434", "23.04.2014", "buinui");

g4.in_gotel("lux", "3", "1435", "23.04.2014", "spokoyniy");

g5.in_gotel("lux", "6", "1436", "23.04.2014", "spokoyniy");

g6.in_gotel("lux", "3", "1437", "23.04.2014", "spokoyniy");

g7.in_gotel("lux", "3", "1438", "23.04.2014", "spokoyniy");

g8.in_gotel("lux", "1", "1439", "23.04.2014", "buinui");

g9.in_gotel("lux", "2", "1440", "23.04.2014", "spokoyniy");

g10.in_gotel("lux", "3", "1441", "23.04.2014", "spokoyniy");

g11.in_gotel("lux", "3", "1442", "23.04.2014", "spokoyniy");

g12.in_gotel("lux", "2", "1443", "23.04.2014", "spokoyniy");

g13.in_gotel("lux", "3", "1444", "23.04.2014", "buinui");

g14.in_gotel("lux", "3", "1445", "23.04.2014", "spokoyniy");

g15.in_gotel("lux", "3", "1446", "23.04.2014", "spokoyniy");

vector <gotel*>v;

v.push_back(&g1);

v.push_back(&g2);

v.push_back(&g3);

v.push_back(&g4);

v.push_back(&g5);

v.push_back(&g6);

v.push_back(&g7);

v.push_back(&g8);

v.push_back(&g9);

v.push_back(&g10);

v.push_back(&g11);

v.push_back(&g12);

v.push_back(&g13);

v.push_back(&g14);

v.push_back(&g15);

while (x != 'n')

{

int vubor = my_menu();

switch (vubor)

{

case 1: case_1(v); break;

case 2: case_2(v); break;

case 3: exit(EXIT_FAILURE);

}

cout << "\n\nProdoljit' robotu: y,n" << endl;

cin >> x;

}

return 0;

}

  1. Архангельский А.Я. Delphi 2015. Справочное пособие. Откорректированное и дополненное – М.: Бином, 2013. – 569 с.
  2. Борзунов С.В. Практикум по параллельному программированию: учеб. пособие / С.В. Борзунов, С.Д. Кургалин, А.В. Флегель. – СПб.: БХВ, 2017. – 236 с.
  3. Валитов Ш.М. Современные системные технологии в отраслях экономики: Учебное пособие / Ш.М. Валитов, Ю.И. Азимов, В.А. Павлова. - М.: Проспект, 2016. – 504 c.
  4. Венделева М.А. Информационные технологии в управлении.: Учебное пособие для бакалавров / М.А. Венделева, Ю.В. Вертакова. - Люберцы: Юрайт, 2016. – 462 c.
  5. Гаврилов М.В. Информатика и информационные технологии: Учебник / М.В. Гаврилов, В.А. Климов. - Люберцы: Юрайт, 2016. – 383 c.
  6. Гома Х. UML. Проектирование систем реального времени, распределенных и параллельных приложений / Х. Гома. - М.: ДМК, 2016. – 700 c.
  7. Дарков А.В. Информационные технологии: теоретические основы: Учебное пособие / А.В. Дарков, Н.Н. Шапошников. - СПб.: Лань, 2016. – 448 c.
  8. Дейтел Х.М., П. Дж. Дейтел. Как программировать на С: Четвертое издание. Пер. с англ. – М.: ООО «Бином-Пресс», 2010. – 1248 с.
  9. Довек Ж. Введение в теорию языков программирования / Ж. Довек, Ж.-Ж. Леви. - М.: ДМК, 2016. – 134 c.
  10. Ерохин В.В. Безопасность информационных систем: учеб пособие / В.В. Ерохин, Д.А. Погонышева, И.Г. Степченко. - М.: Флинта, 2016. – 184 c.
  11. Згадзай О.Э. Информационные технологии в юридической деятельности: Учебное пособие / О.Э. Згадзай и др. - М.: ЮНИТИ, 2016. – 335 c.
  12. Информатика для экономистов: учебник для академического бакалавриата/Под ред. В.П. Полякова.- М.: Юрайт, 2015. – 524 с.
  13. Информационные технологии: Учебное пособие / Л.Г. Гагарина, Я.О. Теплова, Е.Л. Румянцева и др.; Под ред. Л.Г. Гагариной - М.: ИД ФОРУМ: НИЦ ИНФРА-М, 2015. – 320 c.
  14. Информационные системы и технологии: Научное издание. / Под ред. Ю.Ф. Тельнова. - М.: ЮНИТИ, 2016. – 303 c.
  15. Корнеев И.К. Информационные технологии в работе с документами: Учебник / И.К. Корнеев. - М.: Проспект, 2016. – 304 c.
  16. Косиненко Н.С. Информационные системы и технологии в экономике: Учебное пособие для бакалавров / Н.С. Косиненко, И.Г. Фризен. - М.: Дашков и К, 2015. – 304 c.
  17. Кулямин В.В. Технологии программирования. Компонентный подход / В.В. Кулямин. - М.: Интуит, 2014. – 463 c.
  18. Куроуз Д. Компьютерные сети. Нисходящий подход / Д. Куроуз, К. Росс. - М.: Эксмо, 2016. – 912 c.
  19. Лафоре Р. Объектно-ориентированное программирование в С++. Классика Cumputer Science. 4-е изд. – СПб.: Питер, 2013. – 928 с.
  20. Лукин В.Н. Введение в проектирование баз данных / В.Н. Лукин. - М.: Вузовская книга, 2015. – 144 c.
  21. Нимейер П. Программирование на Java / Патрик Нимейер, Дэниэл Леук; [пер. с англ. М.А. Райтмана]. – Москва : Эксмо, 2014. – 1216 с.
  22. Романова Ю.Д. Информационные технологии в управлении персоналом: Учебник и практикум / Ю.Д. Романова, Т.А. Винтова, П.Е. Коваль. - Люберцы: Юрайт, 2016. – 291 c.
  23. Сальникова Л.С. Современные коммуникационные технологии в бизнесе: Учебник / Л.С. Сальникова. - М.: Аспект-Пресс, 2015. – 296 c.
  24. Советов Б.Я. Информационные технологии: теоретические основы: Учебное пособие / Б.Я. Советов, В.В. Цехановский. - СПб.: Лань, 2016. – 448 c.
  25. Страуструп Б. Программирование: принципы и практика использования С++, испр. изд.: Пер. с англ. – М.: ООО «И.Д. Вильямс», 2013. – 1248 с.

ПРИЛОЖЕНИЕ

Структура класса