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

Применение объектно-ориентированного подхода при проектировании информационной системы (ПОНЯТИЕ И СУЩНОСТЬ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПОДХОДА)

Содержание:

ВВЕДЕНИЕ

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

В настоящее время методы программирования принято разделить на две основные группы: метод структурного программирования сверху вниз; объектно-ориентированное программирование (далее – ООП).

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

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

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

Такие языки программирования как Smalltalk, Object Pascal, C++, Clos и Ada относятся к объектно-ориентированным языкам.

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

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

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

Задачами исследования является:

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

Структура работы обусловлена ее целью. Курсовая работа состоит из двух глав, заключения и списка использованной литературы.

ГЛАВА 1. ПОНЯТИЕ И СУЩНОСТЬ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПОДХОДА

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

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

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

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

– в OOП базовые элементы есть объекты, а не алгоритмы;

– каждый объект представляет собой экземпляр какого-либо определенного класса;

– классы образуют иерархическую структуру.

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

Следует обратить внимание на то, что не все языки программирования являются объектно-ориентированными в строгом смысле этого слова. Так, например, на языке Pascal можно, используя тип Record, создавать объекты и классы, но от этого данный язык не становится объектно-ориентированным, здесь наблюдаются только «отголоски» принципа объектности.

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

При этом: объекты принадлежат соответствующим типам (классам); классы наследуют свойства супер типов (суперклассов)[2].

Переход на объектно-ориентированное программирование начался с языка Simula и получил развитие в последующих языках программирования высокого уровня Smalltalk, Object Pascal, C++, Clos, Ada и Eiffel. Эти языки принято называть объектными или объектно-ориентированными. В этих языках структура программ имеет форму графа, а не дерева, присущего алгоритмическим языкам.

Понятие «объект» возникло более 30 лет назад при разработке компьютеров, преследующих цель отхода от фон-неймановской архитектуры, чтобы устранить барьер между высоким уровнем программного продукта и низким уровнем ЭВМ.

Введение понятия объекта и соответствующего ему стиля программирования создает благоприятные возможности для более качественных средств, обеспечивающих лучшее выявление ошибок, большую эффективность написания программ, сокращение программного кода, улучшение компиляции, экономию памяти. Объектный подход присущ как объектным, так и объектно-ориентированным языкам программирования. Этот стиль программирования начался с языков Simula и Smalltalk, а затем их идеи были внедрены в другие языки высокого уровня, которые получили название объектно-ориентированных языков. Примером этого явления стали модификации языка С в виде C++ и Objective С. Языки Object Pascal, Eiffel и Ada возникли из языка Pascal. Категория объекта использовалась человеком с давних времен[3].

Еще античные греки высказали идею о том, что мир можно трактовать в понятиях как объектов, так и событий. А в XVII веке Р. Декарт отмечал, что человечество рассматривает мир с объектно-ориентированной точки зрения. Для человека объектом является: осязаемый и (или) видимый предмет; нечто, воспринимаемое мышлением; нечто, на что направлена мысль или действие.

Объект представляет собой модель окружающей действительности и, значит, существует во времени и пространстве. Термин «объект» в программировании стали использовать впервые в языке Simulate, где он использовался для моделирования реальности.

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

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

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

1.2. Сущность объектно-ориентированного подхода

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

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

Первыми языками программирования были императивные языки, или машинные инструкции (коды). Они состояли из двоичного кода, который различался в зависимости от машины. Набор возможных команд для таких низкоуровневых «языков» был небольшой, так как каждая машинная инструкция выполняла определенное действие (сложение, копирование машинного слова в регистре, переход к следующему участку кода). Конечно же, для удобства программисты разработали набор буквенных аналогов для этих машинных команд, и такой способ общения с машинным «железом» получил название язык ассемблера.

С развитием процессоров возникла необходимость в более универсальных и широко применимых инструментах для взаимодействия с компьютером. Со временем машинные коды стали очень длинны и неудобны для понимания, поэтому было решено оперировать командами, интуитивно понятными человеку, читающему и пишущему код. Первым высокоуровневым языком для ЭВМ, использовавшим такой подход, стал Фортран. Машинные команды превратились в читабельные: OPEN, CLOSE, PRINT, здесь впервые появляется блочный оператор IF и такие конструкции, как IF THEN — ELSE.

В 1960 — начале 1970 годов начинается развитие следующей парадигмы программирования — структурное программирование, еще один шаг к объектно-ориентированному подходу в проектировании ПО. После работы Эдгара Дейкстры «О вреде оператора goto» у разработчиков того времени приходит понимание, что работу любой программы можно описать, используя только три управляющие структуры: последовательность; ветвление; цикл. Оператор goto с тех пор признан избыточным. Это оператор, позволяющий перейти к любому блоку программы. И начинающим программистам порой кажется, что нет ничего проще, чем использовать оператор goto в определенных участках кода, чтобы не выдумывать очередные ветвления и циклы. Но на деле, использование данного оператора рано или поздно приводит к тому, что программа превращается в «спагетти-код». Такой код невозможно поддерживать, безболезненно модифицировать, и что самое плохое, он труден для восприятия других разработчиков, которые придут на смену автору кода. Это особенно опасно в бизнес-девелопменте, где проектируются большие базы данных на тысячи строк кода.

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

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

Класс — это абстрактный тип данных, создаваемый программистом. Это схема, или контракт, описывающий поля и методы объектов, которые будут созданы по лекалам этого класса. Например, человек, машина, департамент — это абстракция, значит, ее можно описать в виде класса. Иван Иванович, белая "Шкода" с номерами нн123, операционный департамент — это конкретные представители данных абстракций, то есть, говоря языком объектно-ориентированного подхода к программированию, это объекты данных классов. Задача разработчика — описать абстрактные и конкретные объекты реального мира языком ООП. Описание класса реализуется в описании его полей и методов.

Поля — это переменные, то есть величины, характеризующие работу данного класса. Например, если мы пишем класс «Машина» для компьютерной игры, мы можем определить для него следующие поля:

class Car { string brand = "Hunday Solaris"; string colour = "Yellow"; double speed = 0;

/*...остальной код программы...*/ }

Инкапсуляция Поля могут изменять свои значения в ходе выполнения программы, если это предусмотрено программистом. Если автор не хочет, чтобы поля были доступны вне класса, и какая-то другая программа (пользователь) могла изменить их значение, то он «инкапсулирует» данные, то есть делает их недоступными, используя ключевые слова private, protected.

Если же поля должны быть доступны во всей программе, то перед ними ставится доступ public.

Например, можно сделать все поля класса публичными:

class Car { public string brand; public string colour; public double speed;

\* ...остальной код программы... *\ }

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

class MainClass { public static void Main() { Car car = new Car(); car.colour = "Red"; /* ...остальной код программы...*/ } } Чтобы избежать случайного изменения данных, разработчик инкапсулирует их. В случае с цветом машины вместо public необходимо написать private. Тогда изменение цвета напрямую будет сделать невозможно.

Второй «столп» разработки объектно-ориентированным подходом — полиморфизм. Бьерн Страуструп, создатель языка C++, сформулировал определение полиморфизма так: «Один интерфейс — много реализаций». Вкратце, полиморфизм — это возможность создавать абстрактный класс, который описывает общую конструкцию структуры, а от него уже создаются производные классы, реализующие недостающие механизмы. Например, при создании персонажа компьютерной игры, с точки зрения объектно-ориентированного подхода, логично будет сначала реализовать абстрактный класс Person, и от него уже создавать конкретные классы: Archer, Healer, Warrior и так далее.

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

Решает эту проблему объектно-ориентированный подход. Классы создаются не для каждого конкретного объекта, а вначале проектируется абстрактный класс, и от него создаются классы-наследники. Как и инкапсуляция, полиморфизм это второе важнейшее правило ООП[6].

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

Вместо этого можно сказать, что мотоцикл является классом-наследником от машины. Тогда становится возможным использовать схожие поля и методы машины в классе мотоцикла, например, марку, цвет, скорость. В коде наследование обозначается так: class Motocycle : Car { /*…остальной код программы...*/ }

Теперь поля и методы класса-родителя Car доступны для использования в классе-наследнике Motorcycle. Вкратце, наследование — это механизм повторного использования кода, и нацелен на удобное и логически грамотное расширение программы. Также наследование помогает следовать принципу DRY (Do not Repeat Yourself).

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

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

1.3. Преимущества и недостатки объектно-ориентированного подхода

Теперь поговорим о свойствах, которые приобретает программа при использовании объектно-ориентированного подхода к ее проектированию и кодированию.

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

Наследование. В объектно-ориентированном программировании есть возможность наследовать структуру и поведение класса от другого класса.

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

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

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

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

Интерфейс. В некоторых языках программирования (C#, Java) понятие интерфейса выделено явно - это не только открытые методы и свойства самого класса.

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

Главным минусом использования ООП можно назвать громоздкость при решении простых задач. Сравни, например, два участка кода, написанного на PHP. Первый пример – процедурный код, второй – объектно-ориентированный. И тот, и другой скрипт ведут к одному результату: просто выводят на экран фразу “Hello, world”:

Скрипт №1

<?php

print “Hello, world”:

Скрипт №2

<?php

class helloWorld {

function myPrint() {

print “Hello, world.”;

}

}

$myHelloWorld = new helloWorld();

$myHelloWorld->myPrint();

Показательно, не правда ли? С другой стороны, у ООП есть очень большой плюс: такой код удобнее поддерживать, изменять и обслуживать, так как он разбит на модули, которые проще воспринимаются визуально. Да, и ошибок меньше. Кроме того, объектно-ориентированные языки программирования легче изучаются новичками.

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

ГЛАВА 2. РЕАЛИЗАЦИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПОДХОДА ПРИ ПРОЕКТИРОВАНИИ ИНФОРМАЦИОННОЙ СИСТЕМЫ

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

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

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

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

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

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

Кроме того, потеря производительности происходит из-за большого количества наследуемого кода. Так же проблемой является динамическое размещение и удаление объектов, поскольку выделение памяти из кучи вызывает дополнительные вычислительные расходы. Но обычно положительные свойства объектно-ориентированных систем нивелируют недостатки, описанные выше, и производительность программы, написанной с использованием объектно-ориентированного подхода чаще выше, чем у её аналога написанного при помощи структурного[9].

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

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

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

Выделяют три основных типа отношений между классами. Первый, называемый “is-a” или «обобщение/специализация», характеризуется наличием какого-то подкласса, являющегося частным случаем какого-то более общего класса. Например, подкласс кошки является частью класса животные.

Второй, называемый “part of” или “целое/часть”, используется тогда, когда какой-то объект является частью другого объекта, хвост является частью кошки.

Третий тип - это смысловое отношение или ассоциации. Кошка ассоциируется с домом, потому что является домашним животным. И иерархия классов, и иерархия объектов является многоуровневой, причем классы и объекты более высокого уровня строятся из более простых[10].

Это позволяет разрабатывать довольно сложное системы по частям, выполняя декомпозицию системы поэтапно.

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

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

Итак, объектно-ориентированный язык программирования (ОО-язык) — язык, построенный на принципах объектно-ориентированного программирования. В основе концепции объектно-ориентированного программирования лежит понятие объекта — некой сущности, которая объединяет в себе поля (данные) и методы (выполняемые объектом действия). Например, объект человек может иметь поля имя, фамилия и методы есть и спать. Соответственно, в программе можем использовать операторы Человек.Имя:="Иван" и Человек.Есть(пища). В современных ОО языках используются механизмы: − Наследование. Создание нового класса объектов путём добавления новых элементов (методов). Некоторые ОО языки позволяют выполнять множественное наследование, то есть объединять в одном классе возможности нескольких других классов. − Инкапсуляция. Сокрытие деталей реализации, которое позволяет вносить изменения в части программы безболезненно для других её частей, что существенно упрощает сопровождение и модификацию ПО.

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

Таким образом, интерфейс классов остаётся прежним, а реализация методов с одинаковым названием и набором параметров различается. В ООП обычно применяется полиморфизм подтипов(называемый при этом просто «полиморфизмом»), нередко в форме позднего связывания. [1, c.880]

Неполный список объектно-ориентированных языков программирования:

1. ActionScript (3.0)

2. Ada

3. C#

4. C++

5. Cyclone

6. D

7. Delphi

8. Dylan

9. Eiffel

10. F#

11. Io

12. Java

13. JavaScript

14. JScript .NET

15. Object Pascal

16. Objective-C

17. Perl

18. PHP

19. PowerBuilder

20. Python

21. Ruby

22. Scala

23. Simula

24. Smalltalk

25. Swift

26. Vala

27. VB.NET

28. Visual DataFlex

29. Xbase++

30. X++

Кроме ОО-языков общего назначения существуют и узкоспециализированные ОО-языки.

Рассмотрим некоторые из них.

JavaScript относится к языкам, в которых нет особых различий в парадигмах. Это значит, что можно писать в объектно-ориентированном, функциональном, императивном и других стилях. Именно такой подход сильно повлиял на простоту его изучения и применения. К слову, как раз с этой целью он и создавался. Скорее всего, факт простоты и функциональности и сыграл решающую роль в развитии и распространении языка. Он стал настолько популярен, что используется практически во всех сферах веб-программирования. JavaScript не принадлежит ни одной компании. Однако само название JavaScript зарегистрировано за Oracle, которой также принадлежит Java.

По ходу разработки продукт несколько раз переименовывали. Начальная версия называлась Mocha, затем - LiveScript, и уже в финале - JavaScript. В наше время практически каждый пользователь Интернета хотя бы отдалённо знает, что такое JavaScript. То, что можно сделать на языке JavaScript, практически не ограничено. Его встраивают в приложения, веб-страницы, сервисы и standalone-продукты. Новомодная и мощная связка AJAX привнесла ещё больше возможностей для реализации потенциала JavaScript. Именно она даёт возможность незаметно для пользователя обновлять небольшую часть страницы, не перезагружая её целиком. Это позволяет сэкономить трафик и увеличить удобство использования веб-интерфейсов. Внедрение в документ происходит путем указания специальных тегов, означающих начало и конец скрипта - <script> и </script>. Как правило, встраивать скрипт непосредственно в HTML-код считается моветоном. Более изящным и признанным способом является вынесение кода в отдельный файл, а затем подключение его в нужном месте страницы. Итак, это лёгкий в изучении и применении скриптовый язык, который используется практически на каждом сайте или веб-сервисе в Интернете. На его основе создаются и продвигаются библиотеки, расширяющие функционал и упрощающие разработку. Стандартных же возможностей JavaScript вполне хватает для реализации большинства задач, связанных не только с веб-программированием, но и с прикладными решениями[11].

Delphi (Дельфи) — Среда программирования, использующая язык Object Pascal, разработанный фирмой Borland и изначально реализованный в её пакете Borland Delphi, от которого и получил в 2003 году своё нынешнее название. По сути является наследником языка Pascal с объектно-ориентированными расширениями.

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

Самая важная библиотека — базовая EiffelBase, она содержит базовые структуры и алгоритмы. Короче говоря, эта либа включает в себя классы, составляющие ядро Eiffel-системы: они служат для арифметических операций и обработки исключений.

EiffelVision 2 — кросс-платформенная графическая библиотека, позволяющая строить расширенный пользовательский интерфейс для приложений, работающих в любой мало-мальски распространенной операционной системе: Windows, UNIX, Linux, VMS и других. Следующие две либы платформозависимые — работают только в Windows. WEL (Windows Eiffel Library) основывается на Win32 API (отсюда зависимость) и позволяет строить приложения, используя средства последней: окна, диалоги, элементы управления, присущие Win-приложениям, а также многое другое. EiffelCOM упрощает разработку приложений, использующих компонентную модель Microsoft (что понятно из названия либы).

Клиент-серверная библиотека EiffelNet позволяет обмениваться структурами данных между компьютерами по сети.

EiffelTime реализует разностороннюю работу с датой и временем. При включении библиотеки EiffelStore в приложение оно получает возможность работы с данными различных баз данных через драйвер ODBC, среди них: Oracle, SQL, Ingres, Sysbase. EiffelThread реализует в приложении поддержку многопоточности, при этом оно остается независимым от аппаратного и программного окружения и в равной степени поддерживается во всех Windows NT, UNIX системах на процессорах x86/64, SGI рабочих станциях и суперкомпьютерах Cray. Eiffel2Java создает интерфейс между программой, написанной на Eiffel, и Java-приложением, таким образом, из первой можно вызвать вторую. С помощью EiffelWeb можно на языке Eiffel разрабатывать динамические HTML-страницы, содержащие формы, обрабатываемые CGI-скриптами.

Библиотеки EiffelLex и EiffelParse используются для создания текстовых и синтаксических анализаторов. Они могут быть применены для разработки трансляторов самых разных видов, в том числе компиляторов и интерпретаторов.

Eiffel содержит огромное количество синтаксических отличий от стандартных (C-подобных) языков: объявление классов, переменных, методов, массивов; условные, циклические конструкции; предусловия, постусловия, классовые инварианты; взаимоотношения клиента и поставщика и многие другие языковые конструкции содержатся в Эйфеле.

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

2.2. Использование объектно-ориентированного подхода при проектировании информационной систем

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

Моделирование предметной области необходимо для выявления, классификации и формализации сведений обо всех аспектах предметной области, определяющих свойства разрабатываемой системы. Разработка информационных систем – это моделирование предметной области при помощи структур данных и программного кода.

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

Решение, основанное на модели предметной области, предусматривает создание сети взаимосвязанных объектов, каждый из которых представляет собой осмысленную сущность предметной области.

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

Проанализируем обзор существующих подходов к построению модели предметной области и анализ применения объектно-ориентированных фреймворков при её моделировании.

Существующие методы моделирования предметной области с использованием объектно-ориентированного подхода: моделирование с использованием XMLфайлов, аннотированные классы.

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

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

Рисунок 1. Пример диаграммы классов модели предметной области

Также при моделировании предметной области может быть использован расширяемый язык разметки XML. Он предназначен для разметки документов произвольной структуры. XML документы содержат дерево вложенных открывающих и закрывающих тегов, каждый из которых может содержать несколько пар «атрибут – значение». Таким образом, если выполнить предварительную разметку документа, то с помощью XML можно создать онтологию отдельного документа и целой предметной области[13].

С помощью конфигурационных XML-файлов осуществляется сопоставление классов с таблицами БД. При использовании файла XML можно сгенерировать основу исходного кода для классов длительного хранения. При разработке крупных проектов довольно часто возникает ситуация, когда сквозной функционал, слабо относящийся к бизнес-логике, сильно расширяется, заполняя код однотипными конструкциями. Это может быть логирование операций, работа с кешем или проверка прав доступа[14].

В этом случае полезно использовать аннотации. Аннотация – средство, что позволяет встроить информацию поддержки в исходные файлы, то есть аннотации можно использовать для отслеживания ошибок, устранения предупреждений, генерации кода, XML файлов, маркировки классов, полей. Например, можно пометить поле аннотацией @NotNull, что означает, что данное поле не может быть равно null. Или, например, пометить метод аннотацией @Secured с указанием роли, которой должен будет обладать пользователь для выполнения этого метода.

При написании средних по масштабу и крупных web-проектов[15] применяются специальные языки программирования (ЯП), например, PHP или Python. При этом код при их написании на чистом ЯП растягивается на тысячи строк, в которых даже самому опытному web-программисту легко запутаться. Чтобы этого не происходило, необходима четкая структуризация кода и избавление его от дублирования.

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

«Фреймворк.АСУ» служит интеграционной средой при построении информационного пространства кафедры АСУ, объединяющего различные задачи учебного процесса в рамках единого интерфейса отображения и управления информацией. Основные возможности фреймворка «Фреймворк.АСУ» рассматриваются в работе Куликова Г.Г., Старцева Г.В., Бармина А.А., Барминой О.В [16] и Куликова Г.Г., Шилиной М.А., Старцева Г.В., Бармина А.А [17].

Платформа фреймворка построена на принципах объектно-ориентированного подхода и состоит из двух основных компонентов: среды разработки, и системы управления контентом[18].

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

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

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

Гибкость “Фреймворк.АСУ” объясняется возможностью создавать произвольные типы объектов, настраивать связи между ними, а также управлять отображением объектов в рамках веб-проекта.

Ориентируясь на принципы объектно-ориентированного программирования, в «Фреймворк.АСУ» организованы классы, описывающие предметную область кафедры АСУ.

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

Рисунок 2. Фрагмент графа наследования класса CModel

Стандартизация именования объектов схемы базы данных позволяет устанавливать объектно-реляционные отношения и преобразования на основе метаданных, предоставляемых моделью.

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

Для задания атрибутов меток используется функция attributeLabels(). Метки, заданные с помощью этой функции, в дальнейшем используются для вывода в представлении названия указанного поля таблицы базы данных.

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

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

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

Для решения этой проблемы в системе организована коллекция объектов (identity map). Её использование гарантирует, что внутри одной транзакции для представления одних сущностей будут использованы одни и те же объекты. При этом обеспечивается не только изоляция транзакций разных пользователей, но и повышается производительность по причине сокращения обращений к базе данных[19].

Рассмотрим использование «Фреймворк.АСУ» для моделирования информационного пространства кафедры технического университета.

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

Информационное моделирование предметной области выполнено с использованием методологии IDEF1X и выполнена автоматизация с использованием хранилища данных на основе реляционной СУБД и файлового хранилища.

Многие из таблиц СУБД являются отражениями сущностей предметной области. Например, таблица студентов в фреймворке представлена классом CStudent, который предоставляет доступ к записи в таблице студентов кафедры.

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

Рисунок 3. Фрагмент информационной модели предметной области

Сущность студент связана со следующими сущностями: − диплом (diploms): таблица diploms, отношение один-ко-многим, класс-менеджер CStaffManager; − учебная группа (group): таблица study_groups, отношение один-к-одному, класс-менеджер CStaffManager и др.

Правила валидации для сущности Студент задаются функцией: public function validationRules() {return array ("required" => array("fio"));}

Таким образом, если не указать ФИО студента, модель при сохранении выдаст ошибку с требованием заполнить обязательные поля. Преимущества моделирования предметной области с использованием объектно-ориентированных фреймворков.

Применение фреймворков при моделировании предметной области позволяет решить следующие задачи:

1. Сокращение времени на моделирование предметной области;

2. Обеспечение распределённой разработки;

3. Адаптация модели под конкретную предметную область, например, кафедры университета. «Фреймворк.АСУ» объединяет в себе различные задачи учебного процесса кафедры технического университета в рамках единого веб-портала.

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

Итак, можно сделать вывод, что модель предметной области описывает важные понятия предметной области и их связи между собой. Без проведения моделирования велика вероятность ошибок в решении стратегических вопросов, приводящих к экономическим потерям и высоким затратам на последующее перепроектирование системы. Использование объектно-ориентированного фреймворка «Фреймворк.АСУ» для моделирования предметной области дает возможность моделировать не только структуру предметной области, но также и поведение отдельных объектов, относящихся к определенному типу.

ЗАКЛЮЧЕНИЕ

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

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

Сделаны следующие выводы:

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

2) Применение фреймворков при моделировании предметной области позволяет решить следующие задачи:

1. Сокращение времени на моделирование предметной области;

2. Обеспечение распределённой разработки;

3. Адаптация модели под конкретную предметную область, например, кафедры университета. «Фреймворк.АСУ» объединяет в себе различные задачи учебного процесса кафедры технического университета в рамках единого веб-портала.

3) Модель предметной области описывает важные понятия предметной области и их связи между собой. Без проведения моделирования велика вероятность ошибок в решении стратегических вопросов, приводящих к экономическим потерям и высоким затратам на последующее перепроектирование системы. Использование объектно-ориентированного фреймворка «Фреймворк.АСУ» для моделирования предметной области дает возможность моделировать не только структуру предметной области, но также и поведение отдельных объектов, относящихся к определенному типу.

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

  1. Булах Евгения. Техническая проза интернет-проектов [Электронный ресурс] – режим доступа: http://www.marketer.ru/internet/site/ designstudio/ vybiraem-ispolnitelya/texnicheskaya-proza-internetproektov
  2. Гинзбург В. М. Проектирование информационных систем в строительстве. Информационное обеспечение; Издательство Ассоциации строительных вузов - Москва, 2008. - 368 c.
  3. Гради Буч и др. Объектно-ориентированный анализ и проектирование с примерами приложений [Текст] / Гради Буч. – М.: Вильямс, 2008. – 720 с.
  4. Использование аннотаций в PHP 5.4 для АОП и не только [Электронный ресурс] – режим доступа: http://habrahabr.ru/post/149102/
  5. Карасюк В.В. Описание концепций предметной области на базе онтологий для систем обучения // Вестник Национального технического университета Харьковский политехнический институт. 2006. № 23. С. 85-88
  6. Касторнов А.Ф., Касторнова В.А. Объектно-ориентированное программирование как перспективное направление развития школьного курса информатики [Текст] / А.Ф. Касторнов, В.А. Касторнова // Вестник Череповецкого государственного университета, 2017. – №5 (80). – С. 177-181
  7. Касторнов А.Ф., Касторнова В.А. Языки программирования и их роль в становлении предметной области «Информатика» [Текст] / А.Ф. Касторнов, В.А. Касторнова // Педагогическая информатика, 2016. – № 1. – С. 59-68.
  8. Касторнова В.А. Структуры данных и алгоритмы их обработки на языке программирования Паскаль [Текст] / В.А. Касторнова. – СПб.: БХВ-Петербург, 2016. – 304 с.
  9. Ковалева И. В., Баженов Р. И. Разработка двухмерной игры в системе трехмерного моделирования UNITY3D//Перспективные информационные технологии (ПИТ 2017): сборник трудов международной научно-технической конференции. -2017. -С. 790-792.
  10. Козлов С. В. Применение методов функционального анализа при формировании оптимальных стратегий обучения школьников//Международный журнал экспериментального образования. -2016. -№ 3-2. -С. 182-185
  11. Куликов Г.Г., Старцев Г.В., Бармин А.А., Бармина О.В. Методика интеграции информационно-поисковых систем и корпоративных информационных систем на основе системных моделей бизнес-процессов. // Прикладная информатика – 2014 - №1 – с. 6-15.
  12. Куликов Г.Г., Шилина М.А., Старцев Г.В., Бармин А.А. Структурирование контента информационного пространства технического университета с использованием процессного подхода и семантической идентификации // Вестник УГАТУ. 2014. № 4(65). С. 115-124
  13. Максимова Н. А. Разработка приложений на основе сервис-ориентированных систем//NovaInfo.Ru. -2016. -Т. 3. № 46. -С. 41-44.
  14. Ослэндер Д. М., Риджли Дж. Р., Ринггенберг Дж. Д. Управляющие программы для механических систем. Объектно-ориентированное проектирование систем реального времени; Бином. Лаборатория знаний - Москва, 2009. - 416 c.
  15. Размахнина А. Н., Баженов Р. И. О применении экспертных систем в различных областях//Постулат. -2017. -№ 1 (15). -С. 38.
  16. Советов Б. Я., Водяхо А. И., Дубенецкий В. А., Цехановский В. В. Архитектура информационных систем; Академия - Москва, 2012. - 288 c.
  17. Фаулер М. Архитектура корпоративных приложений: пер. с англ. – М.: Издательский дом “Вильямс”, 2006. – 544 с
  1. Гради Буч и др. Объектно-ориентированный анализ и проектирование с примерами приложений [Текст] / Гради Буч. – М.: Вильямс, 2008. – 720 с.

  2. Касторнов А.Ф., Касторнова В.А. Объектно-ориентированное программирование как перспективное направление развития школьного курса информатики [Текст] / А.Ф. Касторнов, В.А. Касторнова // Вестник Череповецкого государственного университета, 2017. – №5 (80). – С. 177-181

  3. Касторнова В.А. Структуры данных и алгоритмы их обработки на языке программирования Паскаль [Текст] / В.А. Касторнова. – СПб.: БХВ-Петербург, 2016. – 304 с.

  4. Касторнов А.Ф., Касторнова В.А. Языки программирования и их роль в становлении предметной области «Информатика» [Текст] / А.Ф. Касторнов, В.А. Касторнова // Педагогическая информатика, 2016. – № 1. – С. 59-68.

  5. Ковалева И. В., Баженов Р. И. Разработка двухмерной игры в системе трехмерного моделирования UNITY3D//Перспективные информационные технологии (ПИТ 2017): сборник трудов международной научно-технической конференции. -2017. -С. 790-792.

  6. Козлов С. В. Применение методов функционального анализа при формировании оптимальных стратегий обучения школьников//Международный журнал экспериментального образования. -2016. -№ 3-2. -С. 182-185

  7. Размахнина А. Н., Баженов Р. И. О применении экспертных систем в различных областях//Постулат. -2017. -№ 1 (15). -С. 38.

  8. Гинзбург В. М. Проектирование информационных систем в строительстве. Информационное обеспечение; Издательство Ассоциации строительных вузов - Москва, 2008. - 368 c.

  9. Ослэндер Д. М., Риджли Дж. Р., Ринггенберг Дж. Д. Управляющие программы для механических систем. Объектно-ориентированное проектирование систем реального времени; Бином. Лаборатория знаний - Москва, 2009. - 416 c.

  10. Советов Б. Я., Водяхо А. И., Дубенецкий В. А., Цехановский В. В. Архитектура информационных систем; Академия - Москва, 2012. - 288 c.

  11. Максимова Н. А. Разработка приложений на основе сервис-ориентированных систем//NovaInfo.Ru. -2016. -Т. 3. № 46. -С. 41-44.

  12. Фаулер М. Архитектура корпоративных приложений: пер. с англ. – М.: Издательский дом “Вильямс”, 2006. – 544 с

  13. Карасюк В.В. Описание концепций предметной области на базе онтологий для систем обучения // Вестник Национального технического университета Харьковский политехнический институт. 2006. № 23. С. 85-88

  14. Использование аннотаций в PHP 5.4 для АОП и не только [Электронный ресурс] – режим доступа: http://habrahabr.ru/post/149102/

  15. Булах Евгения. Техническая проза интернет-проектов [Электронный ресурс] – режим доступа: http://www.marketer.ru/internet/site/ designstudio/ vybiraem-ispolnitelya/texnicheskaya-proza-internetproektov

  16. Куликов Г.Г., Старцев Г.В., Бармин А.А., Бармина О.В. Методика интеграции информационно-поисковых систем и корпоративных информационных систем на основе системных моделей бизнес-процессов. // Прикладная информатика – 2014 - №1 – с. 6-15.

  17. Куликов Г.Г., Шилина М.А., Старцев Г.В., Бармин А.А. Структурирование контента информационного пространства технического университета с использованием процессного подхода и семантической идентификации // Вестник УГАТУ. 2014. № 4(65). С. 115-124

  18. Там же

  19. Фаулер М. Архитектура корпоративных приложений: пер. с англ. – М.: Издательский дом “Вильямс”, 2016. – 544 с