Differences

This shows you the differences between two versions of the page.

Link to this comparison view

dvprog_14 [2017-09-01 14:54]
127.0.0.1 external edit
dvprog_14 [2022-07-18 13:20]
Line 1: Line 1:
-====== Genomgång 11 - Objektorienterad programmering ====== 
  
-Viktgt att du lär dig vad som menas med följande och att du kan skilja dem åt: 
-  Klass 
-  Objekt 
-  Attribut 
-  Metod 
-  Arv 
- 
-[[https://sv.wikipedia.org/wiki/Objektorienterad_programmering|Läs mer här]] 
- 
-==== Exempel 1 ==== 
- 
-<code php> 
-<?php 
- 
-// Klassen kan ligga i samma fil som huvudprogrammet, men försök att lägga det i separat fil som i exempel 2. 
- 
-class Counter{ 
- 
-  private $value; 
-   
-  public function __construct(){ 
-    $this->value = 0; 
-  } 
-   
-  public function klick(){ 
-    $this->value++; 
-  } 
-   
-  public function getValue(){ 
-    return $this->value; 
-  } 
-   
-  public function zero(){ 
-    $this->value = 0; 
-  } 
-} 
- 
- 
-// Här börjar huvudprogrammet. 
- 
-include('head.php'); 
- 
-$a = new Counter(); 
-echo $a->getValue() . '<br>'; 
- 
-// $a->value--; // Går inte att komma åt eftersom attributet är private. 
- 
-$i = 0; 
-while ($i < 20){ 
-  $a->klick(); 
-  $i++; 
-} 
-echo $a->getValue() . '<br>'; 
- 
-$b = new Counter(); 
-$b->klick(); 
-echo $b->getValue() . '<br>'; 
- 
-$b->zero(); 
-echo $b->getValue() . '<br>'; 
- 
-include('foot.php'); 
- 
-</code> 
- 
-==== Exempel 2 ==== 
- 
-<code php> 
-<?php 
-include('head.php'); 
-include('animals.php'); 
- 
- 
-$a1 = new Animal();   // Skapar en ny instans (objekt) av klassen Animal. Vikten blir 0 (se klassen). 
-echo 'Djur 1 har vikt: ' . $a1->getWeight() . '<br>';  // -> för att komma åt objektets metoder. 
-  
-$a2 = new Animal(23); // Skapar en ny instans (objekt) av klassen Animal med vikt 23. 
-$a2->setLegs(2);  // Ändrar till 2 ben. 
-echo 'Djur 2 har vikt: ' . $a2->getWeight() . '<br>'; 
-echo 'Djur 2 har ' . $a2->getLegs() . ' ben<br>'; 
-echo $a2->info(); 
- 
-$d1 = new Dog(18); // Skapar en ny instans (objekt) av klassen Dog. 
-$d1->setLegs(3);  // Versionen av setLegs i Dog körs så inget ändras. 
-echo 'Hund 1: ' . $d1->getLegs() . '<br>'; 
-echo 'Hund 1: ' . $d1->getWeight() . '<br>'; 
-echo $d1->info();  // Det kan vara bra att fatta vad som händer här... 
-  
-include('foot.php'); 
- 
-</code> 
- 
-Klasserna ligger i en separat fil, **animals.php**. Här har jag två klasser i samma fil, men ofta har man en fil per klass. 
-<code php> 
-<?php 
- 
-class Animal { 
- 
-  // Alla attribut ska vara private eller protected för att kapsla in dem. 
-  // Metoder som ska gå att komma åt utifrån deklareras som public. 
-  protected $weight;  // Går att komma åt denna variabel i underklassen Dog om det är satt som protected. 
-  private $legs; // Kommer inte åt denna variabel i underklassen Dog om det är satt som private. 
-  
-  public function __construct($weight=1000){  //Defaultvärde kan anges. 
-    $this->weight = $weight; 
-    $this->legs = 10; 
-  } 
-  
-  public function getWeight() { 
-    return $this->weight; 
-  } 
-  
-  public function setWeight($weight) { 
-    $this->weight = $weight; 
-  } 
-  
-  public function getLegs() {  
-    return $this->legs; 
-  } 
-  
-  public function setLegs($legs) { 
-    $this->legs = $legs; 
-  } 
-  
-  public function info() { 
-    return 'vikt: ' . $this->getWeight() . ' ben: ' . $this->getLegs() . '<br>';  
-  } 
-} 
- 
- 
-class Dog extends Animal { 
-   
-  // Ny definition av konstruktorn som sätter antal ben till 4. 
-  public function __construct($weight=1000){ 
-    $this->weight = $weight; 
-    parent::setLegs(4); // Anropar versionen av funktionen i Animal. 
-  } 
-   
-  // Ny definition av funktionen som också finns i Animal så att det inte ska gå att ändra antal ben. 
-  public function setLegs($legs){ 
-  } 
- 
-  // Ny definition av funktionen som också finns i Animal.  
-  public function getWeight(){ 
-    return 'Hunden har vikten: ' . $this->weight; 
-  } 
-   
-  // Ny definition av funktionen som också finns i Animal. 
-  public function getLegs() { 
-    return 'Hundben: ' . parent::getLegs(); // Anropar versionen av funktionen i Animal. 
-  } 
-   
-  // Övriga funktioner ärvs från klassen Animal (parent) till klassen Dog (child). 
-  
-} 
-</code>