Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] OOP, Object-Oriented Programming
kosmos
post 30.05.2008, 20:29:23
Post #1





Grupa: Zarejestrowani
Postów: 367
Pomógł: 17
Dołączył: 4.03.2008

Ostrzeżenie: (0%)
-----


Witam

Już kiedyś pisałem że chciałem się wdrożyć w programowanie obiektowe w PHP smile.gif

Napisałem cosbie taki oto kod składający się z 3 klas:

  1. <?php
  2.  
  3. class Car{
  4.  protected $mark,$color,$mileage;
  5.  
  6.  protected function __construct($mark,$color,$milleage){
  7.  $this->mark=$mark;
  8. $this->color=$color;
  9. $this->mileage=$milleage;
  10.  }
  11.  
  12.  protected function getMark(){
  13.  return $this->mark;
  14. }
  15.  
  16.  protected function getColor(){
  17.  return $this->color;
  18. }
  19.  
  20.  protected function getMileage(){
  21.  return $this->mileage;
  22.  }
  23.  
  24.  private function getAllPropertiesOfCar(){
  25.  return $this->getMark().' '.$this->getColor().' '.$this->getMileage();
  26.  }
  27.  
  28.  }
  29.  
  30.  
  31. class Person extends Car{
  32.  protected $name,$surname,$age,$profession,$auto;
  33.  
  34.  protected function setName($name){
  35.  $this->name=$name;
  36.  }
  37.  
  38.  protected function setSurname($surname){
  39.  $this->surname=$surname;
  40. }
  41.  
  42.  protected function setAgeAndProfession($age,$profession){
  43.  $this->age=$age; $this->profession=$profession;
  44.  }
  45.  
  46.  protected function giveAllPropertiesOfPerson(){
  47.  print $this->name.' '.$this->surname.' '.$this->age.' '.$this->profession.'<br><br>';
  48.  
  49.  }
  50.  
  51.  
  52.  public  function chooseYourCar($mark,$color,$milleage){
  53.  $this->mark=$mark;
  54.  $this->color=$color;
  55.  $this->mileage=$milleage;
  56.  }
  57.  
  58.  
  59.  
  60.  
  61. public  function showNewCar(){
  62.  print $this->name. ' bought a new car. It`s: '.$this->getMark().' the color is: '.$this->getColor().' and the milleage is not to bad: '.$this->getMileage();
  63.  }
  64.  
  65.  }
  66.  
  67.  
  68.  
  69.  class Family extends Person{
  70.  private $address,$fortune,$volume;
  71.  
  72.  function __construct($address,$fortune,$volume){
  73.  
  74. $this->address=$address;
  75.  $this->fortune=$fortune;
  76.  $this->volume=$volume;
  77.  }
  78.  
  79.  
  80.  public function addPerson($name,$surname,$age,$profession){
  81.  $this->setName($name);
  82. $this->setSurname($surname);
  83. $this->setAgeAndProfession($age,$profession);
  84. }
  85.  
  86.  
  87.  public function printFamily(){
  88. $this->giveAllPropertiesOfPerson();
  89. }
  90.  
  91.  public function printPropertiesOfFamilyCar(){
  92. $this->showNewCar();
  93. }
  94.  
  95.  
  96.  public function hugePersonOfFamily(Person $p){
  97.  print'<br>';
  98.  return $this->name.' is hugging '. $p->name;
  99.  }
  100.  
  101.  };
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  // CIAŁO
  112.  
  113.  $family= new Family('London',240000,4);
  114.  $family->addPerson('John','Kowalski',46,'Programmer');
  115.  
  116.  $family_a=new Family('Krakow',120000,2);
  117.  $family_a->addPerson('Izabel','Kowlaska',44,'Designer');
  118.  
  119.  $family->printFamily();
  120.  $family_a->printFamily();
  121.  
  122.  $family->chooseYourCar('volvo','red' ,230000 );
  123.  $family->showNewCar();
  124.  print $family->hugePersonOfFamily($family_a);
  125.  
  126. ?>

Proszę znawców o zweryfikowanie czy dobrze rozumiem pojecie obiektowości. Zastosowałem oddzielne klasy dla obiektów, dodałem dla nich unikalne funkcje gdzie niekiedy inne obiekty korzystają z funkcji innych obiektów.

Proszę o opinie czy moje wypocinki można nazwać choź troszkę OOP questionmark.gif

EDIT:

oto wynik zwracany przez powyższy kod

Kod
John Kowalski 46 Programmer

Izabel Kowlaska 44 Designer

John bought a new car. It`s: volvo the color is: red and the milleage is not to bad: 230000
John is hugging Izabel


Ten post edytował kosmos 30.05.2008, 20:30:47
Go to the top of the page
+Quote Post
nospor
post 30.05.2008, 20:33:09
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




class Person extends Car
A od kiedy to osoba może być samochodem lub przejmować jego cechy? Osoba może mieć samochód.

Dziedziczenie służy do dziedziczenia podobnych cech dla podobnych obiektów. Przykład:
klasa figura
klasa trojkat dziedziczy po figura
klasa kwadrat dziedziczy po figura

klasa samochod
klasa samochodosobowy dziedziczy po samochod
klasa samochodciezarowy dziedziczy po samochod

klasa osoba nie dziedziczy po samochod.
Obiekt osoba może mieć samochód.


Podobnie z rodziną. Rodzina zawiera w sobie osoby. Rodzina nie jest osobą i po niej nie dziedziczy


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kosmos
post 30.05.2008, 21:08:03
Post #3





Grupa: Zarejestrowani
Postów: 367
Pomógł: 17
Dołączył: 4.03.2008

Ostrzeżenie: (0%)
-----


Dzięki za odpowiedź

1) W takim razie wszystko będzie poprawnie jeśli zrezygnuję z dziedziczenia klasy Car po Family i zmienię odpowiednio wywoływanie metod questionmark.gif

2) czy poza tym błędem jest jeszcze coś nie tak questionmark.gif

3) I odpowiedź na pytanie czy to już OOP czy nie smile.gif

Ten post edytował kosmos 30.05.2008, 21:14:35
Go to the top of the page
+Quote Post
nospor
post 30.05.2008, 21:22:51
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ad1) mowilem o dwoch zlych dziedziczeniach smile.gif

ad2) Jak poprawisz tamto to pogadamy

ad3) Przy bledach co zrobiles to jeszcze to nie jest OOP


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kosmos
post 30.05.2008, 21:40:01
Post #5





Grupa: Zarejestrowani
Postów: 367
Pomógł: 17
Dołączył: 4.03.2008

Ostrzeżenie: (0%)
-----


Nie wiem czy dobrze zrozumiałem


  1. <?php
  2. class Family{
  3.  private $address,$fortune,$volume;
  4.  private $person; // <-- TERAZ MA W SOBIE OSOBY questionmark.gif
  5. ?>
Go to the top of the page
+Quote Post
nospor
post 30.05.2008, 21:43:12
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




private $person; // <-- TERAZ MA W SOBIE OSOBY questionmark.gif
Nie, teraz ma w sobie jedną osobe.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kosmos
post 30.05.2008, 22:06:16
Post #7





Grupa: Zarejestrowani
Postów: 367
Pomógł: 17
Dołączył: 4.03.2008

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 30.05.2008, 22:43:12 ) *
private $person; // <-- TERAZ MA W SOBIE OSOBY questionmark.gif
Nie, teraz ma w sobie jedną osobe.


Czyli rozumiem że trzeba tu zrobić kolekcję tych osób w postaci tablicy questionmark.gif

Czy o to chodziło questionmark.gif

  1. <?php
  2. class Family{
  3.  private $address,$fortune,$volume;
  4.  private $person,$name; // <-- TERAZ MA W SOBIE OSOBY questionmark.gif
  5.  
  6.  
  7.  function __construct($address,$fortune,$volume){
  8.  
  9. $this->address=$address;
  10.  $this->fortune=$fortune;
  11.  $this->volume=$volume;
  12.  }
  13.  
  14.  public function addPerson(){
  15.  
  16.  $this->person=array(
  17.  'name'=>$name);
  18.  
  19.  }
  20. ?>


pomóżcie bo naprawdę chce się nauczyć OOP sad.gif
Go to the top of the page
+Quote Post
nospor
post 30.05.2008, 22:32:09
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. <?php
  2. class Family{
  3.  private $address,$fortune,$volume;
  4.  private $persons,$name; 
  5.  
  6.  
  7.  function __construct($address,$fortune,$volume){
  8.  
  9. $this->address=$address;
  10.  $this->fortune=$fortune;
  11.  $this->volume=$volume;
  12. $this->persons = array();
  13.  }
  14.  
  15.  public function addPerson($person){
  16.  
  17.  $this->persons[] = $person;
  18.  
  19.  }
  20. ?>


edit:
PRzeciez tym kodem:
  1. <?php
  2. public function addPerson(){
  3.  
  4.  $this->person=array(
  5.  'name'=>$name);
  6.  
  7.  }
  8. ?>

Za kazdym wywolaniem addPerson nadpisywalbys zmienna $person. Gdzie tu tablica osob? Pomijam już fakt, że $name to z kosmosu bierzesz.
Moze zamiast za OOP to weź się najpierw za podstawy php?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dr_bonzo
post 30.05.2008, 23:53:43
Post #9





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Ziomus, zacznij od zaimplementowania tego:

  1. <?php
  2. $family = new Family( 'Longon', 240000 );
  3. $john = new Person( 'John', 'Kowalski', 46 );
  4. $john->setOccupation( 'Programmer' ); // bo moze byc przeciez bezrobotny, nie?
  5. $bob = new Person( 'Bob', 'Kowalski', 10 );
  6. $family->addPerson( $john );
  7. $family->addPerson( $bob );
  8.  
  9. $family_a = new Family('Krakow',120000,2); 
  10. $iza = new Person( 'Izabela', 'Kowlaska', 44 );
  11. $iza->setOccupation( 'Designer' );
  12.  
  13.  
  14. $family->printFamily(); // jak chcesz mega wypasione OOP to "printera" mozesz do innej klasy przeniesc, ale tutaj powinna ta metodka wystarczyc
  15. // ma wypisac wsyzstkich czlonkow rodziny
  16. $family_a->printFamily();
  17.  
  18. $family->addCar( new Car( 'Volvo', 'red', 230000 ) );
  19. $family->printLatestCarInfo(); // moze korzystac wewnetrznie z $car->printInfo(); zalezy od potrzeb
  20.  
  21. // print $family->hugePersonOfFamily($family_a); - bez sensu - rodzina ma przytulac rodzine, a tak na prawde przytula 1 osobe?questionmark.gif? WTF
  22.  
  23. $john->giveHugTo( $iza ); // wystarczy?
  24. ?>


3 klasy, 0 dziedziczenia

Ten post edytował dr_bonzo 30.05.2008, 23:55:33


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
kosmos
post 31.05.2008, 14:29:20
Post #10





Grupa: Zarejestrowani
Postów: 367
Pomógł: 17
Dołączył: 4.03.2008

Ostrzeżenie: (0%)
-----


Witam ponownie

@dr_bonzo

napisałem to co poleciłeś poszło całkiem dobrze już chyba pomalutku zaczynam rozumieć OOP.


  1. <?php
  2.  
  3. class Family{
  4. private $city,$fortune,$volume;
  5. public $person;
  6. public $car;
  7.  
  8. function __construct($city,$fortune,$volume){
  9. $this->city=$city;
  10. $this->fortune=$fortune;
  11. $this->volume=$volume;
  12. $this->person=array();
  13. }
  14.  
  15. public function addPerson($person){
  16. $this->person[]=$person;
  17. }
  18.  
  19. public function addCar($car){
  20. $this->person[]=$car;
  21. }
  22.  
  23. public function printFamily(){
  24. /**  foreach($this->person as $key => $value)
  25. print $this->person[$key] -> name;
  26. print $this->person[$key] -> surname;
  27. print $this->person[$key] -> age;
  28. print $this->person[$key] -> occupation;
  29. print '<br>';
  30. print_r($this->person);
  31.  } NIESTETY NIE DZIAŁA POPRAWNIE :(*/
  32. for($int = 0; $int < count($this->person); $int++){
  33. print $this->person[$int]->name .'<br>';
  34. print $this->person[$int]->surname .'<br>' ;
  35. print $this->person[$int]->age .'<br>';
  36. print $this->person[$int]->occupation .'<br><br>';
  37. }
  38.  }
  39. };
  40.  
  41. class Person{
  42. public $name,$surname,$age;
  43. public $occupation;
  44.  
  45. function __construct($name,$surname,$age){
  46. $this->name=$name;
  47. $this->surname=$surname;
  48. $this->age=$age;
  49. }
  50.  
  51. public function setOccupation($occupation){
  52. $this->occupation=$occupation;
  53.  }
  54.  
  55. public function huge(Person $p){
  56. print $this->name.' is hugging '.$p->name;
  57. }
  58. };
  59.  
  60. class Car{
  61. private $mark,$color,$mileage;
  62.  
  63. public function __construct($mark,$color,$milleage){
  64.  $this->mark=$mark;
  65. $this->color=$color;
  66. $this->mileage=$milleage;
  67. }
  68.  
  69. public function printLatestCarInfo(){
  70. print $this->mark.' '.$this->color.' '.$this->mileage;
  71. }
  72. };
  73.  
  74. // CIAŁO
  75. $family= new Family('London','240000',2);
  76. $john= new Person('John','Kowalski',46);
  77. $john->setOccupation('Programmer');
  78. $bob= new Person('Bob','Kowalski',10);
  79. $family->addPerson($john);
  80. $family->addPerson($bob);
  81.  
  82. $family_a= new Family('Krakow','120000',1);
  83. $iza= new Person('Izabela','Nowak',44);
  84. $iza->setOccupation('Designer');
  85. $family_a->addPerson($iza);
  86.  
  87. $family->printFamily();
  88. print'Wydruk drugiej rodzinki';
  89. $family_a->printFamily();
  90.  
  91. $family->addCar($car=new Car('Volvo','red',230000));
  92. print'Wydruk samochodu rodzinki<br>';
  93. $car->printLatestCarInfo();
  94. print'<br>Ściskają się<br>';
  95. $john->huge($iza);
  96. ?>


WYNIK

Kod
John
Kowalski
46
Programmer

Bob
Kowalski
10


Wydruk  drugiej rodzinkiIzabela
Nowak
44
Designer

Wydruk samochodu  rodzinki
Volvo red 230000
Ściskają się
John is hugging Izabela


Może jakiś kolejny przykład smile.gif questionmark.gif


@ NOSPOR

Cytat(nospor @ 30.05.2008, 23:32:09 ) *
Pomijam już fakt, że $name to z kosmosu bierzesz.
Moze zamiast za OOP to weź się najpierw za podstawy php?



uznam to za złośliwość z Twojej strony ( wczoraj było dosyć późno ... nie każdy jest robokopem a każdy potrzenuje wypoczynku stąd być może moje błędy )

Ten post edytował kosmos 31.05.2008, 14:37:26
Go to the top of the page
+Quote Post
dr_bonzo
post 31.05.2008, 14:57:35
Post #11





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


@kosmos: OOP to jest to co ja napisalem, reszta to implementacja smile.gif
I proboj pisac zaczynajac wlasnie od tej strony, a nie od razu od implementacji [nie mowie ze zawsze, ale czasem jest to lepsza droga,a juz na pewno do poznania oop].

edit: no i skoro ci kod dziala - to jest ok

Ten post edytował dr_bonzo 31.05.2008, 14:57:50


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
kosmos
post 31.05.2008, 15:20:41
Post #12





Grupa: Zarejestrowani
Postów: 367
Pomógł: 17
Dołączył: 4.03.2008

Ostrzeżenie: (0%)
-----


@dr_bonzo
Dzięki wielkie

w niedługim czasie postaram się napisać coś większego i swojego ( bardziej użytecznego ). Może wtedy wkleje tu kilka wierszy kodu do przeanalizowana smile.gif

Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post 31.05.2008, 17:32:24
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
uznam to za złośliwość z Twojej strony ( wczoraj było dosyć późno ... nie każdy jest robokopem a każdy potrzenuje wypoczynku stąd być może moje błędy )
Pokazujesz kod OOP i prosisz o ocene i wskazanie bledow. Dostales to odemnie. Dostales tez sugestie bys jednak zaczal od nauki podstaw bo z tym tez u Ciebie krucho. Jak chcesz to traktuj to sobie jako zlosliwosc. Wybacz, ale ja nie wiem czy ty gadasz ze mna na forum po nieprzespanej nocy, czy po trzech nieprzespanych nocach. Oddajesz cos pod ocene, znaczy ze chcesz oceny. Koniec kropka. Jak jestes zmeczony to sie przespij i napisz kod dnia nastepnego. Ludzie jak cos analizują Twojego to poswiecają na to swoj czas, wiec oddawaj cos co piszesz będąc w pelni swiadomym. Szanuj czas innych, ktorych prosisz o pomoc.

Widze ze dales pomogl dla dr_bonzo. Ok. Ale ja Ci nie pomogłem? Pokazałem ci na samym początku jakie robisz podstawowe błedy. dr_bonzo niejako to podsumował nie dodając nic więcej. Odnosze wrażenie, ze skoro napisalem bys sie za podstawy wziął to mnie w ten sposob karzesz :/ Dziwne postepowanie.
Nie zeby mi zalezalo na pomogl od Ciebie. Chce ci jedynie zwrocic uwage bys na przyszlosc troche inaczej postepowal. smile.gif

edit: dziękuję za Pomogł smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 19:33