Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
-
Upload
solit -
Category
Technology
-
view
177 -
download
0
description
Transcript of Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
![Page 1: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/1.jpg)
МИНУСЫ ООП НА ПРИМЕРAX PHP
![Page 2: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/2.jpg)
Основные моменты1. ООПа) что есть ООПб) плюсы ОППв) минусы ООП2. Процедурное программирование3. Функциональное программирование
![Page 3: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/3.jpg)
что же такое ООП???
<?php
var_dump(ООП);?>
![Page 4: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/4.jpg)
что же такое ООП???ООП — это методология
программирования, в основe которой лежит принцип
описания сущности проектируемой системы и методов взаимодействия
между ними. При описании сущности используются такие понятия как класс и объект.
![Page 5: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/5.jpg)
Инкапсуляция Наследование Полиморфизм
![Page 6: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/6.jpg)
Инкапсуляция<?php
class ClassName{ // Свойство класса private $text; // Метод установки значения свойства public function setText($text){
// Если надо - обработка ошибок $this->text = $text;
} //Метод выборки значения свойства public function getText() {
// Если надо - обработка ошибок return $this->text;
} }
?>
![Page 7: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/7.jpg)
Наследование<?php
class ParentClass{ protected $name; function hello(){ echo "Hello, "; } function showName($text=null){ $this->name = $text; echo $this->name . '!'; }
} class Child extends ParentClass{ } $obj_child = new Child; $obj_child->hello(); $obj_child->showName("BOB");//Hello, BOB!
?>
![Page 8: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/8.jpg)
Полиморфизм
<?phpabstract class Publication { // определяем правило, что все публикации должны печататься, т.е. иметь метод do_print() abstract public function do_print();}
?>
![Page 9: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/9.jpg)
Полиморфизм
<?phpclass News extends Publication { // переопределяем абстрактный метод печати public function do_print() { echo '<h4>Новость</h4>'; //...
}}
?>
![Page 10: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/10.jpg)
Полиморфизм
<?phpclass Articles extends Publication { // переопределяем абстрактный метод печати public function do_print() { echo '<h4>Статья</h4>'; //...
}}
?>
![Page 11: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/11.jpg)
Полиморфизм<?php
$publications[] = new News();$publications[] = new Article();
foreach ($publications as $publication) { if ($publication instanceof Publication) {
// Если мы работаем с наследниками Publication $publication->do_print();
//можно выводить данные на печать
} else { //исключение или обработка ошибки }
} ?>
![Page 12: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/12.jpg)
Минусы ООП :-(
Сложность понимания
![Page 13: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/13.jpg)
Минусы ООП :-(
Избыточность кода
![Page 14: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/14.jpg)
Минусы ООП :-(
Наследование ненужного функционала
![Page 15: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/15.jpg)
Минусы ООП :-(
Сложность доработки
![Page 16: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/16.jpg)
Минусы ООП :-(
Для разработки нужен опыт
![Page 17: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/17.jpg)
Пол Грэмпрограммист
автор ряда книг по программированию
сторонник функционального программирования
Хотя иногда объектно-ориентированный код действительно годится для повторного использования, таким его делает
вовсе не объектно-ориентированность, а программирование в стиле „снизу вверх“. Возьмём, например, библиотеки: их можно подгружать и повторно использовать сколько
угодно, потому что, по сути, они представляют собой отдельный язык. И при этом, совсем неважно, написаны ли
они в объектно-ориентированном стиле или нет.»
Минусы ООП :-(
![Page 18: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/18.jpg)
Александр Степановразработчик
Standard Template Library, ставшей частью стандартной
библиотеки языка С++
«Я уверен, что ООП методологически неверна. Она начинает с построения классов. Это как если бы математики начинали бы с аксиом. Но реально никто не начинает с аксиом, все начинают с доказательств. Только когда найден набор подходящих доказательств,
лишь тогда на этой основе выводится аксиома. Т.е. в математике вы заканчиваете аксиомой.
Тоже самое и с программированием: сначала вы должны начинать развивать алгоритмы, и только в конце этой работы приходите к тому, что вы в состоянии сформулировать четкие и непротиворечивые интерфейсы. Именно из-за этой
неразберихи в ООП так популярен рефакторинг — из-за ущербности парадигмы вы просто обречены на переписывание программы, уже в тот самый момент, когда
только задумали её спроектировать в ООП-стиле».
Минусы ООП :-(
![Page 19: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/19.jpg)
Никлаус Вирт создатель языков Паскаль и Модула
один из создателей структурного
программированияООП — не более чем тривиальная надстройка над
структурным программированием, и преувеличение её значимости, выражающееся, в том числе, во включении в языки программирования всё новых модных «объектно-ориентированных» средств, безусловно, вредит качеству разрабатываемого программного обеспечения. Никлаус очень удивлен тем вниманием, которое уделяется ныне
ООП.
Минусы ООП :-(
![Page 20: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/20.jpg)
Процедурное программирование
Начало программыКоманда 1Команда 2Команда 3...Команда NКонец программы
![Page 21: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/21.jpg)
Процедурное программирование
Начало программы Если выполнено условие, то вып. команду 1 иначе на команду 3Команда 1Команда 2Команда 3...Команда NКонец программы
![Page 22: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/22.jpg)
Процедурное программирование
Начало процедуры 1Команда 1Команда 2Конец процедуры 1Начало программыКоманда 1Команда 2Если выполнено условие, то выполнить код процедуры 1.Команда 3Конец программы.
![Page 23: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/23.jpg)
Процедурное программирование
Начало процедуры 1 (Переменная 1:строка)Команда 1Команда 2Конец процедуры 1Начало программыКоманда 1Команда 2Если выполнено условие, то выполнить код процедуры 1.Команда 3Конец программы
![Page 24: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/24.jpg)
Процедурное программирование
Начало процедуры 1 (Переменная 1:Целое число)Посчитать факториал числа, находящегося в Переменная 1.Вывести результат на экран.Конец процедуры 1Начало программыПроцедура1(10)Процедура1(5)Процедура1(8)Конец программы
![Page 25: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/25.jpg)
Процедурное программирование
Начало Функции 1 (Переменная 1: Целое число): Целое числоПосчитать факториал числа, находящегося в Переменная 1.Вернуть результат расчета.Конец Функции 1Начало программыПеременная 1:=Функция 1 (10)Переменная 2:=Функция 1 (5)Переменная 3:=Переменная 1+Переменная 2Вывести на экран Переменную 3Конец программы.
![Page 26: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/26.jpg)
Плюсы «процедурки»1. Лёгок для изучения новичкам. 2. Лёгок для работы. 3. Легко писать маленькие сайты-визитки, там не нужен мощный движок.
![Page 27: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/27.jpg)
Минусы «процедурки»1. Плохо расширяемый. 2. Тяжело читаемый. 3. Не структурирован. 4. Повторение кода везде. 5. Сложно поддерживать
![Page 28: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/28.jpg)
Пример PHP<?php
$chars = "qazxswedyujmkiolp12345690QAZXSWEDCUJMKIOLP";
$numpass = htmlspecialchars($_POST['numpass']);$maxlength = htmlspecialchars($_POST['maxlength']);if(проверка на валидность){
$size = strlen($chars) - 1;for ($i = 1; $i <= $numpass; $i++) {
$password = null; for ($j = 1; $j <= $maxlength; $j++) { $password .= $chars[rand(0, $size)]; } echo $password . ‘<br/>’;
}else{
echo ‘Incorrectly entered data!’;}
?>
![Page 29: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/29.jpg)
Функциональное программирование
![Page 30: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/30.jpg)
Функциональное программирование
Функциональное программирование - это парадигма
программирования, в которой выполнение программы
представляет собой вычисление некоторого выражения,
описывающего применение функций (в математическом
понимании) ко входным данным.
![Page 31: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/31.jpg)
Чистые функции<?php
function getFactorial($n){ if(!$n){ return("Факториал числа $n не существует."); } else{ if($n <= 1){return 1;} return $n * getFactorial($n-1);
} } echo getFactorial(5);//120
?>
![Page 32: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/32.jpg)
Функции высших порядков
![Page 33: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/33.jpg)
Рекурсия<?php
function getFactorial($n){ if(!$n){ return("Факториал числа $n не существует."); } else{ if($n <= 1){return 1;} return $n * getFactorial($n-1);
} } echo getFactorial(5);//120
?>
![Page 34: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/34.jpg)
Лямбда функции
<?php$square = function($arg){
return $arg * $arg;};
echo $square(4);//16 ?>
![Page 35: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/35.jpg)
Замыкания
<?php$arg = 4;$square = function() use($arg){
return $arg * $arg;};
echo $square();//16 ?>
![Page 36: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/36.jpg)
Каррирование и частичное применение<?php
$volume = function($length = 0, $width = 0, $height = 0) use($valume){ $getArgs = func_get_args(); $numArgs = func_num_args(); if($numArgs == 3){ return $length * $width * $height; } elseif($numArgs < 3){ return function() use(&$volume, $getArgs){ $newArgs = array_merge($getArgs, func_get_args()); return call_user_func_array($volume, $newArgs);
} else{ echo "Too many arguments!"; }
};$standardVolume = $volume(10);$vol = $standardVolume(5,5);
?>
![Page 37: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий](https://reader036.fdocuments.net/reader036/viewer/2022081412/545b1a1aaf795998788b5eb3/html5/thumbnails/37.jpg)
<?php
echo "Thank you for listening!";
?>