Ооп анализ предметной области

ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ АНАЛИЗ

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

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

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

В данном определении обращают на себя внимание следующие две важные части: объектно-ориентированное проектирование:

1) основывается на объектно-ориентированной декомпозиции;

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

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

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

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

ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ АНАЛИЗ

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

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

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

– анализ предметной области;

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

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

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

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

При данном подходе кандидатами в классы и объекты могут быть выбраны:

– осязаемые предметы (автомобили, датчики);

– роли (учитель, политик);

– события (посадка на Марс, запрос);

– взаимодействие (заем, встреча).

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

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

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

Анализ включает следующие этапы:

– построение скелетной модели предметной области при консультациях с экспертами в этой области;

– изучение существующих в данной области систем и представление резуль­татов в стандартном виде;

– определение сходства и различий между системами при участии экспертов;

– уточнение общей модели для приспособления к нуждам конкретной систе­мы.

Анализ области можно вести относительно аналогичных приложений (верти­кально) или относительно аналогичных частей одного и того же приложения (горизонтально).

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

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

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

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

CRC-карточки – Class-Responsibilities-Collaborators (Класс-От­ветственности-Сотрудники) – это простой и эффективный способ анализа сценариев.

Сотрудник – это другой класс, который взаимодействует с данным для обеспечения некоего общего набора поведений.

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

На рис. 5.1 приведен вид CRC-карточки для класса Stack.

Рис. 5.1. CRC-карточка для класса Stack

Разработчики по ходу анализа сценария за­водят по карточке на каждый обнаруженный класс и дописывают в нее новые пункты.

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

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

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

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

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

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

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

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

Кроме того, по ходу работы возможно следующее:

– выделить излишек ответственности в новый класс;

– перенести ответственность с одного большого класса на несколько более детальных классов;

Источник

Методы объектного анализа и построения моделей предметных областей

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

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

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

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

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

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

  • метод объектно-ориентированного системного анализа OOAS (Object-Oriented system analysis ), позволяющий выделить сущности и объекты ПрО, определить их свойства и отношения, а также построить на их основе информационную модель, модель состояний объектов и процессов представления потоков данных (dataflow) [4.1];
  • метод объектно-ориентированного анализа OOA ( Object-Oriented analysis ), обеспечивающий моделирование ОМ и формирование требований к ПрО с помощью понятия » сущность-связь » (entity-relationship ER), спецификацию потоков данных и соответствующих процессов [4.2];
  • метод SD ( Structured Design ) структурного проектирования системы, данных и программ преобразования входных данных в выходные с помощью структурных карт Джексона [4.3-4.5];
  • методология объектно-ориентированного анализа и проектирования OOAD ( Object-oriented analysis and design), которая основывается на ER-моделировании сущностей и отношений в объектной модели ПрО, она обеспечивает определение системы и организацию данных с использованием структурных диаграмм, диаграмм » сущность-связь » и матрицы информационного управления [4.6, 4.7];
  • технология объектного моделирования OMT (Object Modeling Technique) включает в себя процессы (анализа, проектирования и реализации), набор нотаций для задания четырех моделей (объектной, динамической, функциональной и взаимодействия) [4.8, 4.9];
  • объединенный метод UML, включающий средства и понятия метода Г. Буча (объекты, классы, суперклассы), принципы наследования, полиморфизма и упрятывания информации об объектах, а также варианты использования метода Джекобсона для задания сценариев работы системы при выполнении задач ПрО и диаграммные средства взаимодействия объектов Румбауха [4.10, 4.11];
  • метод определения распределенных объектов на основе объектной модели CORBA и набора сервисных системных компонентов общего пользования, обеспечивающих их функционирование в среде распределенных приложений [4.16];
  • метод генерации (generative) частей системы из семейства ПрО с помощью готовых объектов, аспектов, компонентов, программ многоразового использования и приложений, а также модели характеристик, в которой представлены функциональные и нефункциональные требования к семейству систем [4.13].
Читайте также:  Лирика Тютчева и Фета общее и различное

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

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

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

4.1.1. Основные понятия методов объектного анализа ПрО

К основным понятиям методов объектного анализа ПрО отнесем следующие [4.12, 4.13].

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

Согласно теории Фреге [4.14] спецификацию объекта можно трактовать как треугольник:

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

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

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

Концепт — значение некоторой абстрактной сущности ПрО, обозначается уникальным именем или идентификатором. Группа подобных концептов — это родительский концепт, который заведомо определяется некоторым набором общих атрибутов. Концепт вместе со своими атрибутами представляется графически в ОМ или в текстовом виде.

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

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

Класс — это множество объектов, обладающих одинаковыми свойствами, операциями, отношениями и семантикой. Любой объект — это экземпляр класса. Класс представляется различными способа-ми (например, списками объектов, операций, состояний). Измеряется класс количеством экземпляров, операций и т.п.

Предметная область — это то, что анализируется с целью выделения специфичного множества понятий (сущностей, объектов) и связей между ними. На множестве этих понятий определяются задачи в целях автоматизированного их решения. Пространство ПрО можно разделить на пространство задач ( problem space ) и пространство решений (solution space) [4.13]. Пространство задач — это сущности, концепты ПрО, а пространство решений — это множество программных реализаций задач, в том числе функциональные компоненты, которые обеспечивают решение задач и функций ПрО, представленных в этом пространстве.

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

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

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

Для объектов модели устанавливаются отношения или связи. Различаются статические (постоянные) связи, которые не изменяются или изменяются редко, и динамические связи, которые имеют определенные состояния и изменяются во время функционирования системы.

Связи между объектами могут быть следующие:

  • связь один к одному (1:1) существует тогда, когда один экземпляр объекта некоторого класса связан с единственным экземпляром другого класса, т.е. в связи принимают участие по одному экземпляру из классов;
  • связь один ко многим (1:N), существует тогда, когда один экземпляр объекта некоторого класса связан одновременно с одним или более экземплярами другого класса или того же самого класса;
  • связь многие ко многим (M:N) существует тогда, когда в связях принимают участие несколько экземпляров объектов двух классов, т.е. один или больше экземпляров другого класса связан с одним или более экземплярами первого класса.

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

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

Используя приведенные базовые понятия методов объектного анализа ПрО, далее излагаются: объектный метод анализа ПрО и построения моделей [4.1], визуальный метод моделирования — UML [4.17] и проектирование архитектуры системы на основе стандартов.

Источник



Описание предметной области

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

Цель данной работы: создать модель системы учёта номерного фонда, используя объектно-ориентированного программирование (ООП).

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

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

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

Основные понятия ООП

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

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

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

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

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

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

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

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

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

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

Читайте также:  Применение гравиметрического анализа

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

Концепции ООП

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

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

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

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

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

Другой фундаментальной составляющей концепции объектно-ориентированного программирования является понятие наследования.

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

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

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

Еще одним фундаментальным компонентом концепции объектно-ориентированного программирования является понятие инкапсуляции.

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

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

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

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

К основным свойствам инкапсуляции относятся следующие возможности:

1. совместное хранение данных и функций (т.е. свойств и методов) внутри объекта ;

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

3. изоляция пользователя от особенностей реализации (что обеспечивает независимость от машины и потенциально дружественный интерфейс приложений).

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

3.1 Язык программирования ” Python ”

Голландец Гвидо ван Россум, создатель языка программирования Python, говорит о своём творении следующее: "Python — интерпретируемый, объектно-ориентированный высокоуровневый язык программирования с динамической семантикой. Встроенные высокоуровневые структуры данных в сочетании с динамическими типизацией и связыванием делают язык привлекательным для быстрой разработки приложений (RAD, Rapid Application Development). Кроме того, его можно использовать в качестве сценарного языка для связи программных компонентов. Синтаксис Python прост в изучении, в нем придается особое значение читаемости кода, а это сокращает затраты на сопровождение программных продуктов. Python поддерживает модули и пакеты, поощряя модульность и повторное использование кода. Интерпретатор Python и большая стандартная библиотека доступны бесплатно в виде исходных и исполняемых кодов для всех основных платформ и могут свободно распространяться."

Python — это универсальный язык программирования. Он имеет свои преимущества и недостатки, а также сферы применения. В поставку Python входит обширная стандартная библиотека для решения широкого круга задач. В Интернете доступны качественные библиотеки для Python по различным предметным областям: средства обработки текстов и технологии Интернет, обработка изображений, инструменты для создания приложений, механизмы доступа к базам данных, пакеты для научных вычислений, библиотеки построения графического интерфейса и т.п. Кроме того, Python имеет достаточно простые средства для интеграции с языками C, C++ (и Java) как путем встраивания (embedding) интерпретатора в программы на этих языках, так и наоборот, посредством использования библиотек, написанных на этих языках, в Python-программах. Язык Python поддерживает несколько парадигм программирования: императивное (процедурный, структурный, модульный подходы), объектно-ориентированное и функциональное программирование.

Можно считать, что Python — это целая технология для создания программных продуктов (и их прототипов). Она доступна почти на всех современных платформах (как 32-битных, так и на 64-битных) с компилятором C и на платформе Java.

Создание Python было начато Гвидо ван Россумом (Guido van Rossum) в 1991 году, когда он работал над распределенной ОС Амеба. Ему требовался расширяемый язык, который бы обеспечил поддержку системных вызовов. За основу были взяты ABC и Модула-3. В качестве названия он выбрал Python в честь комедийных серий BBC "Летающий цирк Монти-Питона", а вовсе не по названию змеи. С тех пор Python развивался при поддержке тех организаций, в которых Гвидо работал. Особенно активно язык совершенствуется в настоящее время, когда над ним работает не только команда создателей, но и целое сообщество программистов со всего мира. И все-таки последнее слово о направлении развития языка остается за Гвидо ван Россумом.

Практическая часть

Описание предметной области

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

Классы объектов

Клиенты (Клиент, Фамилия, Имя, Отчество, Паспортные данные, Комментарий).
Номера (Номер, Количество человек, Комфортность, Цена).
Поселение (Клиент, Номер, Дата поселения, Дата освобождения, Примечание).

Диаграмма классов

В первой строке задаётся кодировка файла программы. Это необходимо, если в тексте программы используются символы кириллицы. В данном случае используется кодировка utf-8

from connect import create,close

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

Далее описан класс “Client”, он имеет атрибуты “code” – уникальный номер, по значению которого можно однозначно идентифицировать объект (ФИО клиентов могут совпадать), “name” – имя клиента, и, соответственно название функции доступа к значению этого атрибута. Аналогичное описание для атрибутов “family”, “name”, “patronym”, “comment”, “passport”.
Двойной символ подчёркивания в названии атрибута означает, что он приватный, т.е. недоступный вне класса. Доступ к нему осуществляется через специальные функции: “setname” – позволяет изменить значение атрибута (аналогично “setfamily”, “setpatronym”, “setcomment”, “setpassport”), “getname” – позволяет получить значение атрибут ( аналогично “getfamily”, “getpatronym”, “getcomment”, “getpassport”). В начале описывается конструктор класса “init” – функция, размещающая объект в памяти и возвращающая ссылку на него, кроме того конструктор может может выполнять некоторые действия, необходимые при создании объекта, в данном случае это задание начальных значений атрибутов.

def __init__(self, code=0, family=», name=», patronym=», comment=», passport=»):

def getcode(self):return self.__code

def getfamily(self):return self.__family

def getname(self):return self.__name

def getpatronym(self):return self.__patronym

def getpassport(self):return self.__passport

def getfullname(self):return self.__family+" "+self.__name+" "+self.__patronym

def __init__(self, code=0, number=», capacity=», comfort=», price=»):

def getcode(self):return self.__code

def getnumber(self):return self.__number

def getcapacity(self):return self.__capacity

def setcomfort(self, comfort):self.__comfort=comfort

def getcomfort(self):return self.__comfort

def setprice(self, price):self.__price=price

def getprice(self):return self.__price

def __init__(self, code=0, Room=None, date_in=», date_out=», notes=""):

def getcode(self):return self.__code

def getclients(self):return self.__clients

def getroom(self):return self.__Room

def getdate_in(self):return self.__date_in

def getdate_out(self):return self.__date_out

def getnotes(self):return self.__notes

stroka=scode+’ ‘+sfio+’ N’+snomer+’ ‘+self.getdate_in()+’-‘+self.getdate_out()+’ ‘+str(sprice)

Модуль “connect.py” содержит функции для работы с базой данных. Функция “create()” – проверяет наличие базы данных и создаёт объекты для работы с базой, в случае отсутствия базы данных, сохдаёт её и заполняет текстовыми значениями. Функция “close()” – завершает соединение с базой данных.

import sqlite3 as db

PRAGMA foreign_keys = ON;

create table client

(code integer primary key,

create table room

(code integer primary key,

create table accom

(code integer primary key,

client integer references client(code) on update cascade on delete set null,

room integer references room(code) on update cascade on delete set null,

insert into client (code,family,name,patronym,comment,passport) values (1, "Ivanov", "Ivan", "Ivanovich", "Simple klient", "6415 234567 Given 21 of October");

insert into client (code,family,name,patronym,comment,passport) values (2, "Petrov", "Petr", "Petrovich", "Best klient", "6417 674578 Given 19 of November");

insert into client (code,family,name,patronym,comment,passport) values (3, "Sidorov", "Sidor", "Sidorovich", "Best klient", "6419 987560 Given 14 of January");

insert into room (code,number,capacity,comfort,price) values (1, "101", "for three klients", "standart", 1200);

insert into room (code,number,capacity,comfort,price) values (2, "202", "for two klients", "lux", 2500);

insert into room (code,number,capacity,comfort,price) values (3, "205A", "for one klient", "partlux", 1800);

insert into accom (code,client,room,date_in,date_out,notes) values (1,3,1, "10.09.2015", "17.09.2015", "without breakfast");

insert into accom (code,client,room,date_in,date_out,notes) values (2,1,2, "7.09.2015", "15.09.2015", "without dinner");

insert into accom (code,client,room,date_in,date_out,notes) values (3,2,2, "20.04.2015", "28.04.2015", "without supper");

Источник

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

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

Объект— это простой объект, методами, свойствами и событиями которого вы можете управлять.

Объект — это осязаемая сущность, которая четко проявляет свое поведение.

Объект(предмет) вообще то, что дано в познании, или на что обращена наша познавательная деятельность.

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

Согласно теории Фреге спецификацию объекта можно трактовать как треугольник:

<имя объекта > <денотат > <концепт>,

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

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

Читайте также:  Анализ эффективности разработки бизнес планов

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

Концепт — значение некоторой абстрактной сущности ПрО, обозначается уникальным именем или идентификатором. Группа подобных концептов — это родительский концепт, который заведомо определяется некоторым набором общих атрибутов. Концепт вместе со своими атрибутами представляется графически в ОМ или в текстовом виде.

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

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

Класс — это множество объектов, обладающих одинаковыми свойствами, операциями, отношениями и семантикой. Любой объект — это экземпляр класса. Класс представляется различными способа-ми (например, списками объектов, операций, состояний). Измеряется класс количеством экземпляров, операций и т.п.

Предметная область— это мысленно ограниченная область реальной действительности, подлежащая описанию или моделированию и исследованию.

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

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

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

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

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

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

Для объектов модели устанавливаются отношения или связи. Различаются статические (постоянные) связи, которые не изменяются или изменяются редко, и динамические связи, которые имеют определенные состояния и изменяются во время функционирования системы.

Связи между объектами могут быть следующие:

связь один к одному (1:1) существует тогда, когда один экземпляр объекта некоторого класса связан с единственным экземпляром другого класса, т.е. в связи принимают участие по одному экземпляру из классов;

связь один ко многим (1:N), существует тогда, когда один экземпляр объекта некоторого класса связан одновременно с одним или более экземплярами другого класса или того же самого класса;

связь многие ко многим (M:N) существует тогда, когда в связях принимают участие несколько экземпляров объектов двух классов, т.е. один или больше экземпляров другого класса связан с одним или более экземплярами первого класса.

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

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

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

Свойство— это некоторый вид параметра объекта. Событие — это сигнал, подаваемый, если с объектом что-то происходит.

Источник

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

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

Предметная область курсовой работы «Офисная мебель».

Оглавление

Основная часть. 5

1. Изучение и описание предметной области. 5

2. Постановка задачи. 6

3. Объектно-ориентированный анализ предметной области. 7

4. Проектирование классов. 8

5. Логическая структура программы.. 12

6. Модульная структура программы.. 15

7. Проектирование интерфейса. 16

8. Тестирование программы.. 17

Список литературы.. 25

Приложение 1. Техническое задание. 26

Приложение 2. Текст программы.. 31

Приложение 3. Руководство пользователя. 59

Введение

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

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

Основная часть

Изучение и описание предметной области

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

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

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

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

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

При изучении и описании предметной области использовалась следующая литература [Джесс Либерти, Брэдли Л. Джонс Освой самостоятельно C++ за 21 день].

Предметная область курсовой работы согласно варианту «Офисная мебель».

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

Постановка задачи

Задание на курсовую работу включает в себя:

— Разработку иерархии родственных типов, корневой класс которой абстрактный базовый класс (класс-интерфейс), для моделирования и обработки данных предметной области набором отложенных методов — полиморфная обработка родственных объектов.

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

— Реализацию файлового ввода/вывода и ввода данных с клавиатуры, вывода данных на дисплей.

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

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

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

— Создание объектов классов;

— Поиск по таблице;

— Ввод данных с клавиатуры;

— Вывод данных на экран;

— Запись и чтение из файла для каждого класса;

— Очистка данных в таблице;

— Удаление выбранной строки в таблице;

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

— Полиморфная обработка родственных объектов.

Средой функционирования программного продукта является персональный компьютер на операционной системе Windows XP и выше. Среда программирования Visual Studio 2012 и выше на языке C++.

Параметры технических средств:

— Процессор с частотой 2 ГГц и выше;

— Наличие мыши и клавиатуры;

— Не менее 1 Гбайт оперативной памяти;

— 50 Мбайт свободной памяти – для установки;

— Монитор типа 640×480 или более высокой разрешающей способности.

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

Для описания предметной области была разработана следующая контекстная диаграмма классов (рис. 1.):

Рис. 1. Контекстная диаграмма классов

Офисная мебель по данной контекстной диаграмме разделена на 3 разновидности от базового класса Мебель: Сиденье, Шкаф, Стол. Каждая разновидность офисной мебели содержит свои собственные производные классы. От Сиденье происходят 2 производных класса Кресло и Диван. От Шкаф происходят Гардероб и Шкаф для документации. От Стол идут такие классы как Рабочий стол и Переговорный стол. Все выше перечисленные классы относятся к класс-интерфейсу Office, с помощью которого осуществляется полиморфизм родственных классов.

Источник

Adblock
detector