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

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

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

Дисциплина: Не указана

Добавлен: 30.06.2023

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

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

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

Введение

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

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

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

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

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

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

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

К объектно-ориентированным языкам программирования относятся следующие: 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 для использования этого объекта как единого целого. В общем случае можно определить ссылки и на более сложные объекты, например, структуры или объекты классов. Для приведенного примера следующие два оператора будут эквивалентными: