01 / 07 / 2009

polymorphism

ekleyen: Emre Çevik kategori: design patterns| php

Polimorfizm, değişik şekilleri alabilme anlamına gelmektedir. Bir sınıfa ait nesne, o sınıfın alt sınıflarından birinin şekline bürünebilir. Bu nesneler içeride farklı çalışmalarına rağmen dışarıdan bakıldığında aynı görülür.

Şimdi bir örnek vererek konuyu anlamaya çalışalım.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Hayvan
{
	public function ses()
	{
		print 'Bu methodu direk cagiramazsiniz';
	}
}
 
class Kopek extends Hayvan
{
	public function ses()
	{
		print 'hav hav';
	}
}
 
class Kedi extends Hayvan
{
	public function ses()
	{
		print 'miyav';
	}
}
 
function printSes($obj)
{
	if ($obj instanceof Hayvan) {
		$obj->ses();
    } else {
        print 'yanlis sinif secildi';
    }
}
 
$array = array(new Kopek(), new Kedi());
foreach ( $array as $arr)
{
    printSes($arr);
}
?>

ekran çıktısı

hav hav
miyav

interface ve abstract kullanarak örneğimizi geliştirelim.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?
interface Cevirici
{
    public function cevir();
    public function tip();
}
 
abstract class Para
{
    public function getDeger($deger)
    {
        return $deger * 10;
    }
}
 
class Dolar extends Para implements Cevirici
{
    private $deger;
 
    public function __construct( $deger, $parite)
    {
        $this->deger = parent::getDeger($deger);
        $this->parite = $parite;
    }
 
    public function cevir()
    {
        return ($this->deger * $this->parite);
    }
 
    public function tip()
    {
        return "$/TL";
    }
}
 
class Altin implements Cevirici
{
    private $ayar;
    private $parite;
    private $deger;
 
    public function __construct( $deger, $parite, $ayar )
    {
        $this->deger = $deger;
        $this->parite = $parite;
        $this->ayar = $ayar;
    }
 
    public function cevir()
    {
        return ($this->deger * $this->parite);
    }
 
    public function tip()
    {
        return $this->ayar." ayar / TL";
    }
}
 
function islem( Cevirici $c )
{
    echo "sonuc:  "." {$c->cevir()} {$c->tip()}\n";
}
 
$array = array(new Dolar(100, 2),new Altin(20, 50, 24));
 
foreach( $array as $arr )
{
    islem( $arr );
}
?>

ekran çıktısı

sonuc: 2000 $/TL
sonuc: 1000 24 ayar / TL

  • Digg
  • del.icio.us
  • Facebook
  • Google
  • BlinkList
  • blogmarks
  • description
  • Furl
  • Ma.gnolia
  • NewsVine
  • Reddit
  • Technorati

benzer konular:

  1. composite design pattern – php
  2. adapter design pattern – php
  3. flyweight design pattern – php
  4. observer design pattern – php
  5. decorator design pattern – php
  6. command design pattern – php
  7. template method design pattern – php
  8. iterator design pattern – php
  9. builder design pattern – php
  10. bridge design pattern – php


(No Ratings Yet)
Loading ... Loading ...

henüz yorum yazılmadı

yorum yaz

ne yapıyoruz

eğleniyoruz?

anket

design pattern yazılarını nasıl buldunuz?

sonuçlar

Loading ... Loading ...