Адам, Ева и их дети в ООП

28 апреля 2011 г.

Моим первым языком программирования был Pascal. На нем, за первые годы учебы в вузе, я понаписал кучу всякой лабораторной всячины. Дальше был С, С++, а потом, на несколько лет, по ряду причин, я выпал из студенческой жизни. Вернувшись к высшему образованию после вынужденного перерыва, я начал осваивать другую специальность и забыл о программировании.

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

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

Для наглядности, я привожу код на PHP. Конечно, это просто пример, для улучшения восприятия ООП и не более того. Многие функции не описаны полностью, да это и не требуется в данном случае. Подобный подход к объяснению понятных программистам вещей, очень хорошо воспринимается обычными людьми, так как основан на объектах из человеческой жизни, а не на ситуациях из жизни машин и программ. Ну и конечно капелька юмора в коде только улучшает восприятие.

//абстрактный человек
abstract class human {
 abstract function nutrition(); //функция питания
 abstract function reproduction(); //функция размножения
 abstract function survival(); //функция выживания
 }

//первый человек, мужчина
class Adam extends human {

function reproduction() {
 while (!$tired):
 $anyFemale=findFemale();
 sex($anyFemale);
 endwhile;
 }

function survival() {
 while ($warning==true):
 saveSelfBalls(2);
 endwhile;
 }

function nutrition() {
 while (!foodSearch()):
 $foods=foodSearch();
 endwhile;
 feedSelf($foods['meat']);}
 }

//интерфейс для создания женщины
interface rib {
 public function makeFemaleFromRib();
 }

//первая женщина - из ребра Адама
class Eva extends Adam implements rib {

public function makeFemaleFromRib() {
 return true;}

function reproduction() {
 while (!Child()) :
 $bestMale=findMale();
 sex($bestMale);
 endwhile;
 }

function survival() {
 while ($warning) :
 saveChildren($childCount);
 endwhile;
 }

function nutrition() {
 while (!foodSearch()) :
 $foods=foodSearch();
 endwhile;
 feedChildren($foods['bestFood']);
 feedSelf($foods['otherFood']);
 }

}

//современная женщина
class ModernWoman extends Eva {

function nutrition() {
 if ($richHusband){
 goToRestourant($restorants['bestRestourant']);
 eat($food['bestFood']);}
 elseif (!$richHusband()) {
 $products=buyFood($shops['kopeika']);
 $food=makeFood($products['anyFood']);
 eat($food);}
 }

function findHusband($selfAge){
 if ($selfAge>25) {
 return tryFindRichMan();}
 elseif ($selfAge>25&&$selfAge>35){
 return tryFindSportsMan();}
 elseif ($selfAge>35&&$selfAge>40){
 return tryFindAnyMan();}
 else return findRandomMan();
 }

function reproduction() {
 while (!married()):
 $man=findHusband($selfAge);
 tryToMarriage($man);
 endwhile;
 if (!$lifeProblems&&!$moneyProblems&&!healthProblems&&!anyProblems){
 while (!Child($childCount)):
 sex($man);
 endwhile;
 }
 else safeSex($man);
 }

function survival() {
 while ($warning) :
 save($things[‘anyThings’]);
 endwhile;
 }

}

//соврменный мужчина
class ModerMan extends Adam{

function nutrition() {
 if (!$marriage()&&!$liveTogeatherMother){
 $food=buySausage($shops['anyShop']);
 eat($food);}
 elseif ($marriage||$liveTogeatherMother){
 $food=askFood($foods['tasty']);
 eat($food);}
 elseif ($programmer){
 $food=orderPizza();
 eat($food);}
 }

function findGirl ($boobsSize,$hairColor,$anyParams){
 return $allWorldGirls[$boobsSize][$hairColor][$anyParams];}

function reproduction(){
 if (!$gay&&!$marriage){
 $female=findGirl('3 or more','blonde','best world girl');
 while (!$tried):
 sex($female);
 endwhile;}
 elseif ($marriage){
 while (!$football&&!$tv&&!$beer):
 sex($wife);
 sleepAfterSex($sleepAfterSexInterval);
 endwhile;
 }
 else return false;
 }

function survival() {
 if (!$gay){
 while ($warning==true):
 saveSelfBalls(2);
 endwhile;}
 elseif ($gay){
 hardAnalWork();}
 else return false;
 }
 }
?>

В такой форме, с функциями и переменными названными осмысленными именами, обучение гораздо веселее и понятнее. А сколько всего интересного можно добавить в этот шутливый код!
Например, не хватает некоторых методов для класса ModernWoman:

function writeSocialMessage($socialNetwork,$message) {
 if (postMessage($socialNetwork,$message)) {
 return true;}
 else return false; 
 }

postSocialMessage($socialNetworks['twitter'],'Мой папик просто пусик!'); 

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

Теги: рубрика PHP
  • Похожие статьи
  • Предыдущие из рубрики