Gyakori félreértések

50 %
50 %
Information about Gyakori félreértések

Published on May 3, 2013

Author: athoshun

Source: slideshare.net

Gyakori félreértésekMagyar Attila (BalaBit)PHPMeetup, 2013. április 30.

Bemelegítés: hungarian notation● sName, arrNodes...

Bemelegítés: hungarian notation● sName, arrNodes...● m_name, m_Nodes

Bemelegítés: hungarian notation● sName, arrNodes...● m_name, m_Nodes

Bemelegítés: hungarian notationclass Foo {private $m_name;public function __construct($name) {$this->m_name = $name;}public function bar() {for ($i = 0; $i != 3; ++$i) {printf("%sn", $this->m_name);}}}

Bemelegítés: hungarian notationclass Foo {public:Foo(const char *name) {this->m_name = name;}void bar() {for (int i = 0; i != 3; ++i) {printf("%sn", this->m_name);}}private:const char *m_name;};

Bemelegítés: hungarian notationclass Foo {public:Foo(const char *name) {m_name = name;}void bar() {for (int i = 0; i != 3; ++i) {printf("%sn", m_name);}}private:const char *m_name;};

Bemelegítés: hungarian notationclass Foo {private $m_name;public function __construct($name) {$this->m_name = $name;}public function bar() {for ($i = 0; $i != 3; ++$i) {printf("%sn", $this->m_name);}}}

Bemelegítés: hungarian notationclass Foo {private $m_name;public function __construct($name) {$this->m_name = $name;}public function bar() {for ($i = 0; $i != 3; ++$i) {printf("%sn", $this->m_name);}}}

Bemelegítés: hungarian notationclass Foo {private $m_name;public function __construct($name) {$this->m_name = $name;}public function bar() {for ($i = 0; $i != 3; ++$i) {printf("%sn", $this->m_name);}}}

Öröklődés Mi az az OOP?

Öröklődés Mi az az OOP?● Osztályok, objektumok, metódusok (üzenetek)

Öröklődés Mi az az OOP?● Osztályok, objektumok, metódusok (üzenetek)● encapsulation, polymorphism, inheritance, dynamicdispatch

Öröklődés Mi az az OOP?● Osztályok, objektumok, metódusok (üzenetek)● encapsulation, polymorphism, inheritance, dynamicdispatch● design patterns, modelling (abstractions)

Öröklődés Mi az az OOP?● Osztályok, objektumok, metódusok (üzenetek)● encapsulation, polymorphism, inheritance, dynamicdispatch● design patterns, modelling (abstractions)● REUSABILITY, MAINTAINABILITY

Öröklődésabstract class Application{public function run(){$class = get_class($this);syslog(LOG_INFO, "Running $class");$this->doRun();}abstract protected function doRun();}

Öröklődésclass FizzBuzzApplication extends Application{protected function doRun(){for ($i = 1; $i <= 100; ++$i) {if ($i % 3 == 0)print "Fizz";if ($i % 5 == 0)print "Buzz";if ($i % 3 != 0 && $i % 5 != 0)print $i;print "n";}}}

Öröklődésclass FizzBuzzApplication extends Application{protected function doRun(){for ($i = 1; $i <= 100; ++$i) {if ($i % 3 == 0)print "Fizz";if ($i % 5 == 0)print "Buzz";if ($i % 3 != 0 && $i % 5 != 0)print $i;print "n";}}}

Öröklődésclass FizzBuzzApplication extends Application{protected function doRun(){for ($i = 1; $i <= 100; ++$i) {if ($i % 3 == 0)print "Fizz";if ($i % 5 == 0)print "Buzz";if ($i % 3 != 0 && $i % 5 != 0)print $i;print "n";}}}

Öröklődésclass FizzBuzzWebApplicationextends FizzBuzzApplication{protected function doRun(){print "<html><body><pre>";parent::doRun();print "</pre></body></html>";}}

Öröklődésabstract class Application{public function run(){$class = get_class($this);syslog(LOG_INFO, "Running $class");$this->doRun();}abstract protected function doRun();}

Öröklődésabstract class Application{public function run(){$class = get_class($this);syslog(LOG_INFO, "Running $class");if (in_array("--help", $GLOBALS["argv"])) {print "Help textn";} else {$this->doRun();}}abstract protected function doRun();}

Öröklődésclass FizzBuzzWebApplicationextends FizzBuzzApplication{protected function doRun(){print "<html><body><pre>";parent::doRun();print "</pre></body></html>";}}Notice: Undefined index: argv in...

Öröklődésclass FizzBuzzWebApplicationextends FizzBuzzApplication{protected function doRun(){print "<html><body><pre>";parent::doRun();print "</pre></body></html>";}}Notice: Undefined index: argv in...

Öröklődésabstract class DaemonApplicationextends Application{public function run(){$this->updatePidFile();$this->closeStandardIO();parent::run();$this->clearPidFile();}/* ... */}

Öröklődésabstract class SingletonApplicationextends Application{public function run(){if ($this->isRunningAlready()) {throw new Exception("...");}parent::run();}/* ... */}

Öröklődésabstract class SingletonDaemonApplicationextends ???{public function run(){/* ... */}}

Öröklődésabstract class SingletonDaemonApplicationextends ???{public function run(){/* ... */}}

Többszörös öröklődés? Szerencsére PHP-ben nincs...

Többszörös öröklődés? Szerencsére PHP-ben nincs... Honnan jönne a run() metódus?

Off: többszörös öröklődés Deadly diamond of death

Off: többszörös öröklődés Deadly diamond of death

Off: többszörös öröklődés Deadly diamond of death

Megoldás?abstract class SingletonDaemonApplicationextends ???{public function run(){/* ... */}}

Megoldásinterface Application{/*** @brief Entry point for business logic.* @return void*/public function run();/*** @brief Human-readable name of the application* @return string*/public function getName();}

Megoldásclass ApplicationDecorator implements Application{private $application;public function __construct(Application $app) {$this->application = $app;}public function run() {$this->application->run();}public function getName() {return $this->application->getName();}}

Megoldásclass CommandLineApplicationextends ApplicationDecorator{public function run(){$name = $this->getName();syslog(LOG_INFO, "Running $name");if (in_array("--help", $GLOBALS["argv"])) {print "Help textn";} else {parent::run();}}}

Megoldásclass DaemonApplication extends ApplicationDecorator{public function run(){$this->updatePidFile();$this->closeStandardIO();parent::run();$this->clearPidFile();}/* ... */}

Megoldásclass SingletonApplicationextends ApplicationDecorator{public function run(){if ($this->isRunningAlready()) {throw new Exception("Already running");}parent::run();}/* ... */}

Megoldásnew SingletonApplication(new DaemonApplication(new CommandLineApplication(new ConcreteApplication())));new WebApplication(new ConcreteApplication());

Megoldásnew SingletonApplication(new DaemonApplication(new CommandLineApplication(new ConcreteApplication())));new WebApplication(new ConcreteApplication());

Hány unit tesztet írjak?

Hány unit tesztet írjak? 1 osztály ↔ 1 unit teszt?

Hány unit tesztet írjak? 1 osztály ↔ 1 unit teszt? 1 metódus ↔ 1 unit teszt?

Hány unit tesztet írjak? 1 osztály ↔ 1 unit teszt? 1 metódus ↔ 1 unit teszt? 1 ??? ↔ 1 unit teszt?

Hány unit tesztet írjak? Miért írunk unit teszteket egyáltalán?● gyors&mebízható (!!!) feedback (pl. refactoring)● design● élő dokumentáció, példakód

Hány unit tesztet írjak? Miért írunk unit teszteket egyáltalán?● gyors&mebízható (!!!) feedback (pl. refactoring)● design● élő dokumentáció, példakód Ha ezeket a célokat eléri, akkor unit teszt

Hány unit tesztet írjak? Miért írunk unit teszteket egyáltalán?● gyors&mebízható (!!!) feedback (pl. refactoring)● design● élő dokumentáció, példakód Ha ezeket a célokat eléri, akkor unit teszt Tehát 1 osztályhoz akkor mennyi unit tesztkell? 1 tesztből hány osztályt szabad/kellhasználni?

Hány unit tesztet írjak?

Hány unit tesztet írjak?

Hány unit tesztet írjak? Miért írunk unit teszteket egyáltalán?● gyors&mebízható (!!!) feedback (pl. refactoring)● design● élő dokumentáció, példakód Ha ezeket a célokat eléri, akkor unit teszt Annyi teszt legyen, amennyi a céljainkhoz elég

Tehát? A cél a legfontosabb, ne vesszünk el a policy-k,eszközök és szabályok erdejében.

? FYI: http://www.balabit.com/hu/openacademy(május 23, 17:00, BME Q épület) http://en.wikipedia.org/wiki/Composition_over_inheritance

Köszönöm a figyelmet

Add a comment

Related presentations

Related pages

Gyakori félreértések a biztonsági kamerák ...

Ha nincs arra lehetőségünk, hogy otthon mossunk, ma már valóban komoly lehetőségeink vannak arra, hogy a szennyes ruháinkat tisztává tegyük.
Read more

Gyakori (és drága) félreértések a pihenőidőről ...

Bár a pihenőidő ?intézménye? nem új keletű találmány, tapasztalatok azt mutatják, hogy nagyon sok félreértés van körülötte. Legelőször is ...
Read more

Szerkesztő:G ambrus/misconsceptions – Wikipédia

Gyakori félreértések az evolúcióval kapcsolatban Az öröklődés folyamataival kapcsolatos félreértések. Bővebben: öröklődés: A DNS, mint ...
Read more

Gyakori hibák és félreértések | Szellemi Tulajdon ...

Szellemi tulajdon alatt az alkotó elme szüleményeit értjük: ide tartoznak a találmányok, az irodalmi és művészeti alkotások és a ...
Read more

Rádióriport – Gyakori félreértések a pihenőidővel ...

Tisztelt Partnereink! Október 8-i adásunkban annak jártunk utána, milyen gyakori félreértések vannak a pihenőidővel illetve a munkaközi szünettel
Read more

Diéta – gyakori kérdések és félreértések 2.

Az előző bejegyzésben elkezdtük megbeszélni, hogy mit értek diéta alatt, illetve milyen félreértések szoktak felmerülni a gyakorlati teendők ...
Read more

Gyakori kérdések | Reflex Fordítóiroda

Gyakori kérdések a Reflex Fordítóiroda szolgáltatásaival kapcsolatban. ... illetve a félreértések elkerülése érdekében mindenképpen.
Read more

Gyakori félreértések a Star Trekkel kapcsolatban ...

A minap egy tévésorozatokkal foglalkozó blog (a sorozatjunkie) feltette olvasóinak a kérdést, hogy milyen új Star Trek-sorozatot képzelnének el ...
Read more

Gyakori félreértések a franchiseról - Franchising.hu ...

2014.02.14. Gyakori félreértések a franchiseról Hogyan tud saját magának időt megtakarítani és – szélsőséges esetben – elkerülni a csalókat?
Read more

Diéta – gyakori kérdések és félreértések 3.

Folytatjuk a diétával kapcsolatos gyakran felmerülő kérdések és félreértések átbeszélését. Azoknak, aki most találtak rá a blogra ...
Read more