Какви понятия се използват в ООП:
Class - клас: Това е дефиниран от програмиста даннов тип, който съдържа данни и функции. Вие
може да мислите за класа като за един шаблон, чрез който може да правите различни обекти
(инстанции на класа).
Object: една конкретна инстанция на класа.
Променливи на класа: Това са данните, които са дефинирани в класа (още – атрибути на класа).
Тези данни трябва да са невидими за света извън класа – да могат да се достъпва, единствено
чрез функциите на класа.
Член функции: Това са функциите, дефинирани в класа, използват се за достъп до данните в
класа.
Наследяване (Inheritance): Когато един клас се дефинира като наследяващ данни и функции на
друг (родителски или базов) клас, то имаме наследяване. Той се явява – наследник (или дете или
породен клас) на родителски клас (Parent class).
Родителски клас (Parent class) = base class или super class: Един клас, който се наследява от друг
клас.
Клас - наследник (Child Class) или породен клас: Клас, който наследява друг клас.
Полиморфизъм: Това е една обектно ориентирана концепция, състояща в това: една функция да
бъде използвана за различни цели. Например функцията „move” на клас „animal” може да се
изпълнява по различен начин: пълзене, летене, вървене и т.н.
Конструктор (Constructor): това е специална функция, която се извиква автоматично, когато се
създава конкретен обект (инстанция)на класа.
Деструктор (Destructors): специална функция, която се извиква автоматично, когато един обект
трябва да се разруши.
class Animal {
public function move() {
// Basic implementation
}
}
class Snake extends Animal {
public function move() {
// Implements creeping
}
}
class Eagle extends Animal {
public function move() {
// Implements flying
}
}
class Lion extends Animal {
public function move() {
// Implements running
}
}
class Test {
public function move(Animal $animal) {
$animal->move();
}
}
$snake = new Snake();
$eagle = new Eagle();
$lion = new Lion();
$test = new Test();
$test->move($snake);
$test->move($eagle);
$test->move($lion);
То и да не бърза те са доста често добри примери за начинаещи. Примерно Сингълтон доста добре разяснява работата при създаване на инстанции и това как всяка инстанция работи. Ако се ползва дизайна какъв проблем решава и така нататък. Фактори също е добър дизайн за обучение, но наистина първо са нужни часове писане на примери и схващане на различни идеи. Просто се иска практика. :?:Revelation каза:Рано му е да се сблъсква с шаблоните, ако още не е разбрал основните принципи. Някои шаблони са сложни и само ще го объркат.
Моя съвет е да не бърза с тях.
pix3l каза:Шаблоните са следствие от ООП. Можеш да пишеш обектно без да знаеш каквито и да е шаблони, но не можеш да имплементираш шаблони без ООП.
interface Animal
{
public function move();
}
class Snake implements Animal
{
public function move()
{
// Implements creeping
}
}
class Eagle implements Animal
{
public function move()
{
// Implements flying
}
}
class Lion implements Animal
{
public function move()
{
// Implements running
}
}
class Test
{
public function move($animalName)
{
$err = 0;
if(class_exists($animalName)) {
$classAnimal = new $animalName;
if ($classAnimal instanceof Animal) {
$classAnimal->move();
} else {
$err++;
}
} else {
$err++;
}
if ($err > 0){
throw new Exception("The $animalName does not exist!");
}
}
}
$test = new Test();
$test->move("Snake");
$test->move("Eagle");
$test->move("Lion");
Съгласен съм, но просто е неизбежно да не се срещне дори в малко по-сложните примери със шаблоните. Вариацията на кода зависи от изпълнението на програмиста. Аз като започнах да уча ООП пишех основно обекти с проста логика, но след само седмица четене нямаше как да не се усетя, че вече ползвам вариации на шаблони за дизайн. Самият код те кара да се замисляш и да четеш. :?:Revelation каза:Сингълтон е най-простия и независим шаблон. Всички други се усложняват малко или много със създаването на абастрактни класове, имплементации на интерфейси и т.н.
Нека за сега учи и научи основните принципи на ООП.
Виж, шаблоните за дизайн решават конкретни проблеми, с които едва ли някой, който тепърва учи ООП ще се сблъска. Как ще обясниш на някой, който сега се учи, че с Factory се правят обекти, като той не може да направи разлика между клас и обект?dakata__92 каза:pix3l каза:Шаблоните са следствие от ООП. Можеш да пишеш обектно без да знаеш каквито и да е шаблони, но не можеш да имплементираш шаблони без ООП.
Точно защото са следствие от ООП, са добър учител, защото решават проблеми, които в писането и свързването в логика на различни обекти се срещат. Кода, който си постнал е чудесен пример, за полиморфизъм и с малко преработка на логиката пък е добър пример за Фабрика
PHP:interface Animal { public function move(); } class Snake implements Animal { public function move() { // Implements creeping } } class Eagle implements Animal { public function move() { // Implements flying } } class Lion implements Animal { public function move() { // Implements running } } class Test { public function move($animalName) { $err = 0; if(class_exists($animalName)) { $classAnimal = new $animalName; if ($classAnimal instanceof Animal) { $classAnimal->move(); } else { $err++; } } else { $err++; } if ($err > 0){ throw new Exception("The $animalName does not exist!"); } } } $test = new Test(); $test->move("Snake"); $test->move("Eagle"); $test->move("Lion");
pix3l каза:Виж, шаблоните за дизайн решават конкретни проблеми, с които едва ли някой, който тепърва учи ООП ще се сблъска. Как ще обясниш на някой, който сега се учи, че с Factory се правят обекти, като той не може да направи разлика между клас и обект?dakata__92 каза:pix3l каза:Шаблоните са следствие от ООП. Можеш да пишеш обектно без да знаеш каквито и да е шаблони, но не можеш да имплементираш шаблони без ООП.
Точно защото са следствие от ООП, са добър учител, защото решават проблеми, които в писането и свързването в логика на различни обекти се срещат. Кода, който си постнал е чудесен пример, за полиморфизъм и с малко преработка на логиката пък е добър пример за Фабрика
PHP:interface Animal { public function move(); } class Snake implements Animal { public function move() { // Implements creeping } } class Eagle implements Animal { public function move() { // Implements flying } } class Lion implements Animal { public function move() { // Implements running } } class Test { public function move($animalName) { $err = 0; if(class_exists($animalName)) { $classAnimal = new $animalName; if ($classAnimal instanceof Animal) { $classAnimal->move(); } else { $err++; } } else { $err++; } if ($err > 0){ throw new Exception("The $animalName does not exist!"); } } } $test = new Test(); $test->move("Snake"); $test->move("Eagle"); $test->move("Lion");
class A
{
public function __construct()
{
print "<br>A";
}
}
class B
{
public function __construct()
{
print "<br>B";
}
}
class C
{
public function __construct()
{
$a = new A;
$b = new B;
}
}
$c = new C;
pix3l каза:Добре, щом си решил да говориш за шаблони, дай конкретен пример, в който предимствата на Factory ще изпъкнат.
Моя код не е добър пример, щото убиваш цялата идея на ООП, като използваш интерфейс за подобна цел.