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

Preview:

DESCRIPTION

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

Citation preview

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

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

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

<?php

var_dump(ООП);?>

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

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

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

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

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

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

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

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

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

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

} }

?>

Наследование<?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!

?>

Полиморфизм

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

?>

Полиморфизм

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

}}

?>

Полиморфизм

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

}}

?>

Полиморфизм<?php

$publications[] = new News();$publications[] = new Article();

foreach ($publications as $publication) {  if ($publication instanceof Publication) {

// Если мы работаем с наследниками Publication   $publication->do_print();

//можно выводить данные на печать

 }  else {   //исключение или обработка ошибки  }

} ?>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ООП.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример 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!’;}

?>

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

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

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

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

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

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

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

Чистые функции<?php

function getFactorial($n){ if(!$n){ return("Факториал числа $n не существует."); } else{ if($n <= 1){return 1;} return $n * getFactorial($n-1);

} } echo getFactorial(5);//120

?>

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

Рекурсия<?php

function getFactorial($n){ if(!$n){ return("Факториал числа $n не существует."); } else{ if($n <= 1){return 1;} return $n * getFactorial($n-1);

} } echo getFactorial(5);//120

?>

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

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

return $arg * $arg;};

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

Замыкания

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

return $arg * $arg;};

echo $square();//16 ?>

Каррирование и частичное применение<?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);

?>

<?php

echo "Thank you for listening!";

?>

Recommended