solit 2014, Минусы ООП на примере языка php, Соловей Василий

37
МИНУСЫ ООП НА ПРИМЕРAX PHP

Upload: solit

Post on 01-Nov-2014

173 views

Category:

Technology


0 download

DESCRIPTION

Василий Соловей, Солигорск. PHP-разработчик в в «Электронном Солигорске». «Минусы ООП на примере языка PHP». Development секция. Для разработчиков (начальный и средний уровень). 1. Что есть ООП (легкое повторение уже знакомого) 2. Лучше доверять авторитету мнения, чем мнению авторитета (во всем нужно разбираться основательно, а в ООП тем более) 3. Неизменная скупость в похвалах — верный признак посредственного ума (плюсы ООП) 4. Не все то солнышко, что блестит (основная часть доклада – минусы ООП) 5. Кто владеет информацией, тот владеет ситуацией (пояснение сути доклада: доклад не принижает и не умоляет достоинств ООП он создан расширить кругозор) «Начинать никогда не поздно!». Мотивационное выступление. На личном примере, я могу рассказать, что начинать никогда не поздно, и если есть желание – нет повода себе отказывать. 1. Путь в тысячу миль начинается с одного шага (с чего начать) 2. И на верном пути повстречаются распутья (как не сбиться с дороги начав) 3. Кто ты программист? (мой взгляд на программирование) 4. Успех – дитя настойчивости

TRANSCRIPT

Page 1: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

МИНУСЫ ООП НА ПРИМЕРAX PHP

Page 2: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Основные моменты1. ООПа) что есть ООПб) плюсы ОППв) минусы ООП2. Процедурное программирование3. Функциональное программирование

Page 3: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

что же такое ООП???

<?php

var_dump(ООП);?>

Page 4: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

что же такое ООП???ООП — это методология

программирования, в основe которой лежит принцип

описания сущности проектируемой системы и методов взаимодействия

между ними. При описании сущности используются такие понятия как класс и объект.

Page 5: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Инкапсуляция Наследование Полиморфизм

Page 6: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Инкапсуляция<?php

class ClassName{ // Свойство класса private $text; // Метод установки значения свойства public function setText($text){

// Если надо - обработка ошибок $this->text = $text;

} //Метод выборки значения свойства public function getText() {

// Если надо - обработка ошибок return $this->text;

} }

?>

Page 7: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Наследование<?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, Соловей Василий

Полиморфизм

<?phpabstract class Publication {  // определяем правило, что все публикации должны печататься, т.е. иметь метод do_print()  abstract public function do_print();}

?>

Page 9: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Полиморфизм

<?phpclass News extends Publication {  // переопределяем абстрактный метод печати  public function do_print() {   echo '<h4>Новость</h4>';   //...

}}

?>

Page 10: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Полиморфизм

<?phpclass Articles extends Publication {  // переопределяем абстрактный метод печати  public function do_print() {   echo '<h4>Статья</h4>';   //...

}}

?>

Page 11: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Полиморфизм<?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, Соловей Василий

Минусы ООП :-(

Сложность понимания

Page 13: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Минусы ООП :-(

Избыточность кода

Page 14: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Минусы ООП :-(

Наследование ненужного функционала

Page 15: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Минусы ООП :-(

Сложность доработки

Page 16: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Минусы ООП :-(

Для разработки нужен опыт

Page 17: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Пол Грэмпрограммист

автор ряда книг по программированию

сторонник функционального программирования

Хотя иногда объектно-ориентированный код действительно годится для повторного использования, таким его делает

вовсе не объектно-ориентированность, а программирование в стиле „снизу вверх“. Возьмём, например, библиотеки: их можно подгружать и повторно использовать сколько

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

они в объектно-ориентированном стиле или нет.»

Минусы ООП :-(

Page 18: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Александр Степановразработчик

Standard Template Library, ставшей частью стандартной

библиотеки языка С++

«Я уверен, что ООП методологически неверна. Она начинает с построения классов. Это как если бы математики начинали бы с аксиом. Но реально никто не начинает с аксиом, все начинают с доказательств. Только когда найден набор подходящих доказательств,

лишь тогда на этой основе выводится аксиома. Т.е. в математике вы заканчиваете аксиомой.

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

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

только задумали её спроектировать в ООП-стиле».

Минусы ООП :-(

Page 19: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Никлаус Вирт создатель языков Паскаль и Модула

один из создателей структурного

программированияООП — не более чем тривиальная надстройка над

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

ООП.

Минусы ООП :-(

Page 20: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Процедурное программирование

Начало программыКоманда 1Команда 2Команда 3...Команда NКонец программы

Page 21: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Процедурное программирование

Начало программы Если выполнено условие, то вып. команду 1 иначе на команду 3Команда 1Команда 2Команда 3...Команда NКонец программы

Page 22: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Процедурное программирование

Начало процедуры 1Команда 1Команда 2Конец процедуры 1Начало программыКоманда 1Команда 2Если выполнено условие, то выполнить код процедуры 1.Команда 3Конец программы.

Page 23: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Процедурное программирование

Начало процедуры 1 (Переменная 1:строка)Команда 1Команда 2Конец процедуры 1Начало программыКоманда 1Команда 2Если выполнено условие, то выполнить код процедуры 1.Команда 3Конец программы

Page 24: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Процедурное программирование

Начало процедуры 1 (Переменная 1:Целое число)Посчитать факториал числа, находящегося в Переменная 1.Вывести результат на экран.Конец процедуры 1Начало программыПроцедура1(10)Процедура1(5)Процедура1(8)Конец программы

Page 25: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Процедурное программирование

Начало Функции 1 (Переменная 1: Целое число): Целое числоПосчитать факториал числа, находящегося в Переменная 1.Вернуть результат расчета.Конец Функции 1Начало программыПеременная 1:=Функция 1 (10)Переменная 2:=Функция 1 (5)Переменная 3:=Переменная 1+Переменная 2Вывести на экран Переменную 3Конец программы.

Page 26: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Плюсы «процедурки»1. Лёгок для изучения новичкам. 2. Лёгок для работы. 3. Легко писать маленькие сайты-визитки, там не нужен мощный движок.

Page 27: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Минусы «процедурки»1. Плохо расширяемый. 2. Тяжело читаемый. 3. Не структурирован. 4. Повторение кода везде. 5. Сложно поддерживать

Page 28: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Пример 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, Соловей Василий

Функциональное программирование

Page 30: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Функциональное программирование

Функциональное программирование - это парадигма

программирования, в которой выполнение программы

представляет собой вычисление некоторого выражения,

описывающего применение функций (в математическом

понимании) ко входным данным.

Page 31: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Чистые функции<?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, Соловей Василий

Функции высших порядков

Page 33: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Рекурсия<?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, Соловей Василий

Лямбда функции

<?php$square = function($arg){

return $arg * $arg;};

echo $square(4);//16 ?>

Page 35: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Замыкания

<?php$arg = 4;$square = function() use($arg){

return $arg * $arg;};

echo $square();//16 ?>

Page 36: Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий

Каррирование и частичное применение<?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, Соловей Василий

<?php

echo "Thank you for listening!";

?>