İPUCU

Python Artificial Intelligence’da en çok kullanılan dildir ve gerekli dökümanların paylaşım alanlar burada paylaşılmaktadır.

Seçenekler

Nedir bu Object Oriented ---Python

AngelRayt - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
10/2015
Nereden:
Python
Mesajlar:
1.309
Konular:
213
Teşekkür (Etti):
64
Teşekkür (Aldı):
246
Ticaret:
(0) %
16-04-2018 19:38
#1
Nedir bu Object Oriented ---Python
Merhaba arkadaşlar.
Programlamaya yeni başlamış herkesin sürekli sürekli duyduğu bir kavram var.

Object Oriented Diğer bir değişle Nesne Tabanlı Programlama

Nesne Tabanlı Programlama (Object Oriented Programming) en basit anlamıyla gerçek hayatı programlamaya uyarlamaktır.

Örneğin bir tane hastane otomasyon sistemi yazmak istiyoruz. Bunun için doktorları , heşmireleri ve ameliyathaneleri... aslında birer nesne olarak oluşturmamız gerekiyor. Böyle bir sistemi programlamayla gerçekleştirmek için aslında her bir nesnenin yapısını tanımlayıp, daha sonra bu yapılardan nesneler üretmemiz gerekiyor.

Peki ya OBJE nedir ?

Etrafınıza bakın.Hepsi birer nesnedir. Örneğin buzdolabını düşünün. Bu dolabın kendi içinde değişik özellikleri (attribute) ve fonksiyonları (metod) bulunuyor. Örneğin,buzdolabınızın markası cinsi bu dolabın özellikleridir(attribute). Dolabın otomatik olarak içindeki havayı dengede tutması ise metodudur. Bunun gibi Pythondaki aslında her şey bir objedir. Örneğin, listelere bakacak olursak bu liste objelerinin aslında birçok metodu ve özelliği bulunur.

Kod:
liste = [1,2,3,4,5]  # Liste objesi oluşturmak
Kod:
liste.append(6) # Append metodu
print(liste)
>>[1, 2, 3, 4, 5, 6]


Kod:
type((1,2,3,4)) # tuple objesi
tuple
Kod:
def toplama(a,b):
    return a + b
type(toplama) # Fonksiyon objesi
function


Nesne Tabanlı Programlama - Sınıflar




Kendi veri tiplerimizi oluşturmak ve bu veri tiplerinden objeler üretmemiz için öncelikle objeleri üreteceğimiz yapıyı tanımlamamız gerekiyor. Bunu tasarladığımız yapıya da sınıf veya ingilizce ismiyle class diyoruz. Şimdi class yapılarını öğrenerek konumuza başlayalım.



Class ?
Class Anahtar Kelimesi
Sınıflar veya Classlar objelerimizi oluştururken objelerin özelliklerini ve metodlarını tanımladığımız bir yapıdır ve biz herbir objeyi bu yapıya göre üretiriz. İsterseniz bir Araba classı tanımlayarak yapımızı kurmaya başlayalım



Kod:
#  Yeni bir Araba veri tipi oluşturuyoruz.
class Araba():
    model =  "Renault Megane"
    renk = "Gümüş"            # Sınıfımızın özellikleri (attributes)
    beygir_gücü = 110
    silindir = 4
Sınıfımızı Pythonda tanımladık. Peki bu sınıftan obje nasıl oluşturacağız ? Bunu da şu şekilde yapabiliyoruz.

Kod:
 obje_ismi = Sınıf_İsmi(parametreler(opsiyonel))
Kod:
araba1 =  Araba() # Araba veri tipinden bir "araba1" isminde bir obje oluşturduk.
Kod:
araba1 # Objemizin veri tipi Araba
OUTPUT : <__main__.Araba at 0x8b9f76f860>


Kod:
type(araba1)
__main__.Araba
araba1 objesi artık sınıfta tanımladığımız bütün özelliklere (attributes) sahip olmuş oldu. İşte sınıf ve obje üretmek bu şekilde olmaktadır. Peki bu araba objesinin özelliklerinin nasıl görebiliriz ?


Kod:
        obje_ismi.özellik_ismi


Kod:
araba1.model
OUTPUT :'Renault Megane' 
araba1.renk
OUTPUT :'GÜMÜŞ' 
araba1.beygir_gücü
OUTPUT :'110' 
araba1.silindir
OUTPUT :'4' 




Şimdi de başka bir Araba objesi oluşturalım.



[CODE]
araba2.model
OUTPUT :'Renault Megane'
araba2.renk
OUTPUT :'GÜMÜŞ'
araba2.beygir_gücü
OUTPUT :'110'
araba2.silindir
OUTPUT :'4'


Burda gördüğümüz gibi oluşturduğumuz objelerin buradaki model,renk vs. gibi özelliklerinin değeri aynıdır. Çünkü aslında burada tanımladığımız özellikler birer sınıf özelliğidir. Yani biz bir obje oluşturduğumuzda bu özelliklerin değerleri varsayılan olarak gelir. Bu özelliklerin değerlerine , herhangi bir obje oluşturmadan da erişebiliriz. Bunu da şu şekilde yapabiliriz.




Kod:

Araba.renk # Class_İsmi.özellik_ismi
OUTPUT : 'Gümüş'
Araba.beygir_gücü
OUTPUT : '110'
Bizim her bir objeyi başlangıçta farklı değerlerle oluşturmamız için her bir objeyi oluştururken objelerin değerlerini göndermemiz gerekiyor. Bunun için de özel bir metodu kullanmamız gerekmektedir.


Kod:
                __init__()

Kod:
dir(araba1)

Alacağımız çıktı şu şekilde olacaktır


['__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__le__',
 '__lt__',
 '__module__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__',
 'beygir_gücü',
 'model',
 'renk',
 'silindir']



Burada objemizin tüm özelliklerini ve metodlarını görüyoruz. Ancak biz herhangi bir metod tanımlamamıştır. Buradaki metodlar Python tarafından bir obje oluşturulduğunda özel olarak tanımlanan metodlardır ve biz eğer özel olarak bunları tanımlamazsak Python kendisi bunları varsayılan tanımlıyor. Burada aynı zamanda init metodunu da görüyoruz. Eğer biz bu metodu kendimiz tanımlarsak objelerimizi farklı değerlerle başlatabiliriz.

Aslında init metodu Pythonda yapıcı(constructor ) fonksiyon olarak tanımlanmaktadır. Bu metod objelerimiz oluşturulurken otomatik olarak ilk çağrılan fonksiyondur. Bu metodu özel olarak tanımlayarak objelerimizi farklı değerlerle oluşturabiliriz.

Peki bu metodu nasıl tanımlayacağız ? Direk örnek üzerinden görmeye çalışalım.



Kod:
# Araba Veri tipi 

class Araba():
    # Şimdilik Class özelliklerine ihtiyacımız yok.
    
    def __init__(self):
        print("init fonksiyonu çağrıldı.")



Peki burada self ne anlama geliyor ? self anahtar kelimesi objeyi oluşturduğumuz zaman o objeyi gösteren bir referanstır ve metodlarımızda en başta bulunması gereken bir parametredir. Yani biz bir objenin bütün özelliklerini ve metodlarını bu referans üzerinden kullanabiliriz.

Objeler oluşturulurken, Python bu referansı metodlara otomatik olarak kendisi gönderir. Özel olarak self referansını göndermemize gerek yoktur.

init metodunu ve self'i iyi anlamak için objelerimize özellikler ekleyelim.


Kod:
class Araba():
    
    def __init__(self,model,renk,beygir_gücü,silindir): # Parametrelerimizin değerlerini objelerimizi oluştururken göndereceğiz.
        self.model =  model # self.özellik_ismi = parametre değeri şeklinde objemizin model özelliğine değeri atıyoruz.
        self.renk = renk # self.özellik_ismi = parametre değeri şeklinde objemizin renk özelliğine değeri atıyoruz.
        self.beygir_gücü = beygir_gücü # self.özellik_ismi = parametre değeri şeklinde objemizin beygir_gücü özelliğine değeri atıyoruz.
        self.silindir = silindir # self.özellik_ismi = parametre değeri şeklinde objemizin silndir özelliğine değeri atıyoruz.
Kod:
# araba1 objesini oluşturalım.
# Artık değerlerimizi göndererek objelerimizin özelliklerini istediğimiz değerle başlatabiliriz.
araba1 = Araba("Peugeot 301","Beyaz",90,4)


Kod:
araba2 = Araba("Renault Megane","Gümüş",110,4)

Kod:
araba1.model
OUTPUT : 'Peugeot 301'
Kod:
araba1.renk

OUTPUT : 'GÜMÜŞ'

İstersek init metodunu varsayılan değerlerle de yazabiliriz.

Kod:
class Araba():
    
    def __init__(self , model = "Bilgi Yok",renk = "Bilgi Yok",beygir_gücü = 75 ,silindir = 4): 
        self.model =  model 
        self.renk = renk 
        self.beygir_gücü = beygir_gücü 
        self.silindir = silindir




Kod:
araba1 = Araba(beygir_gücü = 85, renk = "Siyah")
araba1.renk
OUTPUT :'Siyah'

Nesne Tabanlı Programlama - Metodlar
###########EKLENECEKTİR
---------------------




İşletim SistemiLinux Mint Cinnamon 18.03

Ekran Kartı : Nvida GT840M

İşlemci
Intel® Core™ i3-5005U İşlemci
3M Önbellek, 2,00 GHz

Ceen Teşekkür etti.
Greendex - ait Kullanıcı Resmi (Avatar)
Tamamen Forumdan Uzaklaştırıldı
Üyelik tarihi:
12/2017
Mesajlar:
752
Konular:
56
Teşekkür (Etti):
37
Teşekkür (Aldı):
225
Ticaret:
(0) %
16-04-2018 19:44
#2
Eline sağlık yararlı bir konu.
Sanırım bu da bir OOP örneği sayılabilir(Emin değilim, daha önce hiç Python kodlamadım.):
Alıntı:
Mrb.py
import Modul

Modul.Veri()

Modul.py

def Veri:
print("selam")
AngelRayt - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
10/2015
Nereden:
Python
Mesajlar:
1.309
Konular:
213
Teşekkür (Etti):
64
Teşekkür (Aldı):
246
Ticaret:
(0) %
17-04-2018 18:11
#3
Alıntı:
Greendex´isimli üyeden Alıntı Mesajı göster
Eline sağlık yararlı bir konu.
Sanırım bu da bir OOP örneği sayılabilir(Emin değilim, daha önce hiç Python kodlamadım.):
Gibi gibi dostum.
---------------------




İşletim SistemiLinux Mint Cinnamon 18.03

Ekran Kartı : Nvida GT840M

İşlemci
Intel® Core™ i3-5005U İşlemci
3M Önbellek, 2,00 GHz

ihan3t - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
02/2012
Mesajlar:
5.004
Konular:
255
Teşekkür (Etti):
291
Teşekkür (Aldı):
1833
Ticaret:
(0) %
18-04-2018 23:32
#4
OOP de en önemli konu object dediğimiz şey state + behavior dan oluşur. Bir objenin state i alenen dışardan mutate edilmemelidir.

Object in inner statei encapsule edilip behavior lar ile mutate edilmelidir.

Eline sağlık, object orientedı anlamak önemli..
---------------------
Computer Engineer.

Senior Software Engineer.
BufGix - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2015
Nereden:
Phobos/Space
Mesajlar:
1.023
Konular:
74
Teşekkür (Etti):
314
Teşekkür (Aldı):
446
Ticaret:
(0) %
19-04-2018 18:15
#5
Alıntı:
ihan3t´isimli üyeden Alıntı Mesajı göster
OOP de en önemli konu object dediğimiz şey state + behavior dan oluşur. Bir objenin state i alenen dışardan mutate edilmemelidir.

Object in inner statei encapsule edilip behavior lar ile mutate edilmelidir.

Eline sağlık, object orientedı anlamak önemli..
Python’a başka dillerden geçmiş pek çok kişi, Python sınıflarının sarmalamayı (ing: encapsulation) gerçekten desteklememesinden yakınır; yani, özel (ing: private) niteliklerin (ing: attribute) ve onlara erişmek için açık (ing: public) erişim metodlarının (ing: getters and setters) tanımlanamayışından. Doğrudan bu kadar uzak olunamazdı! Python sarmalamanın büyük kısmını, fazladan erişim metodları ile değil, “sihir” ile gerçekleştirmektedir.

Bkz: Python’un Sihirli Metodları | Bora M. Alper (Turkce)
Bkz: https://www.python-course.eu/python3_magic_methods.php
---------------------
~Cahile gelmez benden hayır
bhecy Teşekkür etti.
YESBUTNO - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
12/2017
Mesajlar:
767
Konular:
90
Teşekkür (Etti):
298
Teşekkür (Aldı):
95
Ticaret:
(0) %
23-04-2018 19:35
#6
Hocam ben bu örneklerin aynısını izlediğim eğitim setinde görmüştüm Yazılım Bilimiydi sanırım

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı