Skip to content
semionovaa edited this page May 22, 2020 · 33 revisions

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

Объектно-ориентированный подход

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

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

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

  1. Создали класс
  2. Создали экземпляр класса (объект)
  3. Обращаемся к свойствам и методам экземпляра класса.

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

Если рассматривать операцию для классов, представляющих данные, особенно при их материализации: объявление класса "Таблица" еще не гарантирует, что этот класс будет заполнен какими-то значениями из БД, нужно присутствие SQL и выполнение операции как минимум, SQL в свою очередь, включает элементы реляционной алгебры.

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

  • Инкапсуляция – это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя. Инкапсуляция неразрывно связана с понятием интерфейса класса. По сути, всё то, что не входит в интерфейс, инкапсулируется в классе.
  • Абстрагирование – это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция – это набор всех таких характеристик.
  • Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
    Например, если вы читаете данные из файла, то, очевидно, в классе, реализующем файловый поток, будет присутствовать метод похожий на следующий: byte[] readBytes( int n ); Предположим теперь, что вам необходимо считывать те же данные из сокета. В классе, реализующем сокет, также будет присутствовать метод readBytes. Достаточно заменить в вашей системе объект одного класса на объект другого класса, и результат будет достигнут. При этом логика системы может быть реализована независимо от того, будут ли данные прочитаны из файла или получены по сети. Таким образом, мы абстрагируемся от конкретной специализации получения данных и работаем на уровне интерфейса. Единственное требование при этом – чтобы каждый используемый объект имел метод readBytes.
  • Наследование – это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым или родительским. Новый класс – потомком, наследником или производным классом.

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

Реляционная алгебра

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

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

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

Реляционная алгебра обладает операциями переименования, объединения, пересечения, вычитания и другими. Главным отличием от объектно-ориентированного программирования является объем обработки операций, их возможности и скорость обработки информации. В объектно-ориентированном программировании можно обработать значительно больше информации и выполнение будет в разы быстрее, программирование обладает большим выбором операций, которое не имеет реляционная алгебра. Допустим можно сделать выборку одного поля в другом, а после над ним произвести операции по различным алгоритмам, вырезать с поля какое-либо значение или указать определение для необходимой части из строки, так же можно составить строку, которая будет уникальна, с помощью функции рандом. Например в базах данных сама БД - это класс, конкретное подключение к ней = объект, объекты = таблицы, у них есть методы. С помощью объектно-ориентированного программирования можно работать с базой данных используя различные методы, один из них это прямое подключение к БД и выполнения определенных РА функций, например выборки db.Order.ToList().Where(x => x.IdUser == AutUser.id && x.status == 1);

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

2. Диаграммы состояний UML, основные изобразительные элементы и назначение.

UML – унифицированный язык моделирования (Unified Modeling Language) – это система обозначений, которую можно применять для объектно-ориентированного анализа и проектирования. Его можно использовать для визуализации, спецификации, конструирования и документирования программных систем.

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

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

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

Основные изобразительные элементы и назначение

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

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

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

Рис. 1 Основные изобразительные элементы диаграммы состояний UML их назначение

Рис. 1 Основные изобразительные элементы диаграммы состояний UML их назначение

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

Рис. 2 Диаграмма состояний «Прохождение академического курса студентом»

Рис. 2 Диаграмма состояний «Прохождение академического курса студентом»

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

3. Применение в ВКР

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

Атрибут типа Public выступает как общественный класс с возможностью обратится к любой переменной или функции из любой части программы. Так, к примеру, для отправки писем на почту пользователю в программной коде сайта швейного магазина, разработанного в процессе ВКР, производится реализация фильтра AuthorizeAttribute, который применяется посредством установки атрибута [Authorize] над контролером.

public ActionResult OrderDone(int deliveryType) {…}

{
  int? sum = 0;
  int id = int.Parse(User.Identity.Name);
  var AutUser = db.User.FirstOrDefault(x => x.id == id);
  var OrederList = db.Order.ToList().Where(x => x.IdUser == AutUser.id && x.status == 1);
  Random r = new Random();
  int OrderId = r.Next();
  string listMail = "<br/>Содержание заказа:<br/>";
  foreach(var order in OrederList)
  {
    order.status = 2;
    order.idOrder = OrderId;
    db.Entry(order).State = System.Data.Entity.EntityState.Modified;
    sum += order.count * order.price;
    listMail += order.count + " X " + order.Product1.name + " на сумму "+ order.count * order.price + "грн.<br/>";
    order.deliveryType = deliveryType;
  }
  db.SaveChanges();
  var deliveryString = "";
  if (deliveryType == 1)
  {
    deliveryString = "Доставка почтой";
  }
  else
  if (deliveryType == 2)
  {
    deliveryString = "Доставка самовывоз";
  }
  MailAddress from = new MailAddress("[email protected]", "MagazinProklubki");
  MailAddress to = new MailAddress(AutUser.mail);
  MailMessage m = new MailMessage(from, to);
  m.Subject = "Заказ №" + OrderId;
  m.Body = "<h2>Здравствуйте, " + AutUser.fio + "!<br/>Благодарим за покупку в нашем магазине! </h2><h3>Мы дорожим оказанным доверием.</h3> <br/> Номер заказа: " + OrderId + listMail + "<h2>Итого к оплате: " + sum + " грн." + "</h2>" + deliveryString + "<p>Номер для связи: +380 95 479 0370 </p>";
  m.IsBodyHtml = true;
  SmtpClient smtp = new SmtpClient("smtp.mail.ru",587);
  smtp.Credentials = new NetworkCredential("[email protected]", "idiotlol33");
  smtp.EnableSsl = true;
  smtp.Send(m);
  return View();
}

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

UML-диаграмма

Список использованных источников:

  1. Сайт "Studme.org:
  2. Сайт "Habr.com"
  3. Сайт "A Medium Corporation"
  4. Сайт "function-x.ru"
  5. Сайт "Планерка.Школа креативности"
  6. Сайт "НОУ Интуит"
  7. Сайт "Википедия"
  8. Сайт "Википедия"

Выполнили:
Бойкова А.С. (ИДБ-16-07)
Семионова А.В. (ИДБ-16-05)

Clone this wiki locally