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

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

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

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

Добавлен: 12.03.2024

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

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

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

Пример кода на PHP процедурный подход:

$value = "Hello World!;

echo $value;

Пример кода на PHP объектно-ориентированный подход:

class Enimal {

private $lang;

public function setLang($lang) {

$this->type = $type;

}

public function getLang() {

return $this->lang;

}

public function sayIt() {

return $this->getLang();

}

}

$Enimal = new Enimal();

$Enimal->setLang("Гав");

echo $Enimal->sayIt();

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

 У нас есть класс Enimal:

class Enimal {

private $lang;

public function setLang($lang) {

$this->lang = $lang;

}

public function getLang() {

return $this->lang;

}

public function sayIt() {

return $this->getLang();

}

}

Enimal  - это имя класса.

$lang - это поле класса (или переменная класса)

setLang(), getLang(), sayIt() - это методы класса

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

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

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

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

Пример инкапсуляции на примере класса Enimal:

class Enimal {

private $lang;

private $type;

public function setType($type) {

if($type == "predator") {

$this->type = "predator";

} else if($type == "plant-eating") {

$this->type = $type;

} else {

echo "Ошибка. Укажите только тип хищник или травоядный";

}

}

public function setLang($lang) {

$this->lang = $lang;

}

public function getLang() {

return $this->lang;

}

public function sayIt() {

return $this->getLang();

}

}

$Enimal = new Enimal();

$enimal->setType("predator");

$enimal→setLang("RRRRR, May");

echo $enimal->sayIt();

В этом примере мы добавили в класс Enimal приватное поле пол ($type). Ключевое слово private обозначает, что мы не сможем получить доступ к переменной $type из вне класса.

Если мы попытаемся обратиться к полю $type из вне класса, тогда мы получим ошибку:


$enimal->type = "11"; Fatal error: Cannot access private property Enimal::$type

Для того, чтобы задать поле тип животного, нам нужно обратиться к методу setType() и передать ему в качестве параметра тип Enimal. В этом методе стоит проверка, predator или plant-eating ([хищник или травоядное).

Если в качестве параметра мы попробуем передать другой параметр в этот метод, например $Enimal->setType(“111"), тогда метод вернет нам ошибку.

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

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

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

У животных хищник или травоядное есть уже базовые функции. Могут бегать, дышать, кушать, размножаться и т.д.

Эти свойства передаются от предков к потомству. В объектно-ориентированном программировании, наследование именно это свойство.

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

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

/* Родительский класс Enimal */

class Enimal {

private $type;

/* Конструктор (в нем мы задаем поле $type при создании экземпляра класса) */

public function __construct($type) {

$this->type = $type;

}

/* Метод gather_food(). Предполагаем, что Enimal изначально может добывать пищу */

public function gather_food() {

echo "Я".$this->type." и ";

}

}

/* Класс Predator. Ключевым словом extends мы наследуем родителя Enimal */

class Predator extends Enimal {

public function Hunt() {

echo "и я охочусь на травоядных";

}

}

/* Класс Травоядные. Ключевым словом extends мы наследуем родителя Enimal */

class PlantEating extends Enimal {

public function EatGrass() {

echo "и я кушаю траву";

}

}

/* Создаем экземпляр класса Predator и вызываем методы. */

$type = new Predator("Лев");

$type->gather_food();

$type->Hunt();

/* Создаем экземпляр класса PlantEating и вызываем методы. */

$ type = new PlantEating("Корова");

$type->gather_food();

$trype->EatGrass();

В этом примере, классы Хищник и Травоядное животное унаследовали от родительского класса Enimal общий метод gather_food(). И хищник и травоядное животное могут добывать пищу, но у этих классов появились свои особенности: Хищник охотиться на травоядных, а травоядные кушают траву. Если type=Лев тогда получится «Я Лев и я охочусь на травоядных», type=корова «Я Корова и я кушаю траву».


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

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

Полиморфизм в примере с классами - то это общий метод для объектов. 

Давайте посмотрим на примере реализацию полиморфизма в PHP:

/* Это интерфейс gather_food */

interface gather_food {

public function gather_food();

}

/* Это абстрактный класс Enimal включающий интерфейс gather_food */

abstract class Enimal implements gather_food{

private $type;

public function __construct($type) {

$this->type = $type;

}

public function getType() {

return $this->type;

}

}

/* Класс Predator наследуют класс Enimal и обязан реализовать метод gather_food() */

class Predator extends Enimal {

public function __construct($type) {

parent::__construct($type);

}

public function Hunt() {

echo "я охочусь на травоядных";

}

public function gather_food() {

echo "я хищник ".$this->getType();

}

}

/* Класс PlantEating наследуют класс Enimal и обязан реализовать метод gather_food() */

class PlantEating extends Enimal {

public function __construct($type) {

parent::__construct($type);

}

public function EatGrass() {

echo "я кушаю траву";

}

public function gather_food() {

echo "Я травоядное".$this->getType();

}

}

$type = new Predator("Лев");

$type->gather_food();

$type->Hunt();

$ type = new PlantEating("Корова");

$type->gather_food();

$trype->EatGrass();

?>

Я хищник Лев я охочусь на травоядных. Я Корова я кушаю траву.

Мы модифицировали наши прошлые классы и добавили такие понятия объектно-ориентированного программирования как Интерфейс, Абстрактный класс.

Метод gather_food() в классах Predator и PlantEating мы реализовал по-разному. Это и есть полиморфизм.

Интерфейс - это шаблонный класс без реализации. То есть в интерфейсе мы только задаем методы и эти методы обязаны реализовать классы.

В нашем прошлом примере наш интерфейс gather_food с единственным методом gather_food():

/* Это интерфейс gather_food */

interface gather_food {

public function gather_food();

}

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

Абстрактный класс в ООП - это шаблонный класс, от которого нельзя создать экземпляр класса.

Это значит, что мы не можем с абстрактным классом сделать так:

$type = new Predator("type");

Если мы попытаемся создать экземпляр абстрактного класса, интерпретатор PHP выдаст ошибку.


Абстрактный класс мы можем только наследовать. Он содержит ключевое слово abstract. Также он имплементирует интерфейс gather_food (implements).

/* Это абстрактный класс Enimal имплементирующий интерфейс gather_food */

abstract class Human implements gather_food{

private $type;

public function __construct($type) {

$this->type = $type;

}

public function getType() {

return $this->type;

}

}

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

Заключение

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

Для понимания разницы между процедурным программированием и ООП программированием, я привел примеры одного и того же кода в разных парадигмах.

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

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

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

Сегодня существуют три основных метода создания программного обеспечения:

- метод организации потоков данных;

- метод структурного проектирования сверху вниз;

- объектно-ориентированный метод.

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

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

  1. Бабушкина И.А. Практикум по объектно-ориентированному программированию. / Бабушкина И.А., Окулов С.М.: - М: Бином, Лаборатория знаний, 2004. - 366 с.
  2. Бертран М. Объектно-ориентированное конструирование программных систем / Пер. с англ. - М.: Издательско-торговый дом «Русская Редакция», 2005. - 1232 стр.
  3. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++, 2-е изд. / Пер. с англ. - М.: «Издательство Бином», СПб: «Невский диалект», 1998г. - 560 с.
  4. Грибанова-Подкина М.Ю. UML-модель партионного учета товара для автоматизированной информационной системы// Программные системы и вычислительные методы. 2016. № С. 111-123. DOI: 10.7256/2305-6061.2016.2.19271
  5. Грибанова-Подкина М.Ю. Технологии в построении классов на примере социальной объектной модели// Информатизация образования и науки. 2016. № 2 (30). С. 170-184.
  6. Иванова Г.С., Ничушкина Т.Н., Пугачев Е.К. Объектно-ориентированное программирование: Учебник для вузов. - 3-е изд., стер./Под ред. Г.С. Ивановой. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2007. - 368 с.
  7. Рогачев А.Ф., Федорова Я.В. Использование UML-моделей для исследования и обеспечения информационной безопасности сложных технических систем //Известия Нижневолжского агроуниверситетского комплекса: Наука и высшее профессиональное образование. 2014. № 4(36). С.236-241.
  8. Руководящий документ. Методический документ меры защиты информации в государственных информационных системах. Утвержден ФСТЭК России 11 февраля 2014 г. [Электронный ресурс]. URL: http://fstec.ru/component/attachments/download/675 (дата обращения: 17.02.2017).
  9. Руководящий документ. Концепция защиты средств вычислительной техники и автоматизированных систем от несанкционированного доступа к информации. Утверждена решением Государственной технической комиссии при Президенте Российской Федерации от 30 марта 1992 г. [Электронный ресурс]. URL: http://fstec.ru/component/attachments/download/299 (дата обращения: 17.02.2017).
  10. Руководящий документ Автоматизированные системы. Защита от несанкционированного доступа к информации. Классификация автоматизированных систем и требования по защите информации. Утверждено решением председателя Государственной технической комиссии при Президенте Российской Федерации от 30 марта 1992 г. [Электронный ресурс]. URL: http://fstec.ru/component/attachments/download/29 (дата обращения: 17.02.2017).
  11. Приезжая А.Н. Автоматизированная разработка защищенной информационной системы// Вестник РГГУ. Серия: документоведение и архивоведение. Информатика. Защита информации и информационная безопасность. 2010. №12(55). С. 221-238.
  12. Приезжая А.Н. Технологии встраивания функций безопасности в бизнес-процессы// Вестник РГГУ. Серия: документоведение и архивоведение. Информатика. Защита информации и информационная безопасность. 2009. №10. С. 71-84.
  13. Талагаев Ю.В. Методы анализа и моделирования бизнес-процессов и их реализация в среде Enterprise Architect//Альманах современной науки и образования. 2016. № 10 (112). C. 80-83.
  14. Филяк П.Ю. Мишарин Г.Д. Создание модели информационной безопасности средствами языка UML// Информационная безопасность. 2015. Т. 18. № 2. С. 254-259.