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