Turkhackteam.net/org - Turkish Hacking & Security Platform  
Geri git   Turkhackteam.net/org - Turkish Hacking & Security Platform >
Programlama
> Python



Nedir bu Object Oriented ---Python

Python

Yeni Konu aç Cevapla
 
Seçenekler
Alt 16-04-2018   #1
  • Yüzbaşı
  • Üye Bilgileri
Üyelik tarihi
10/2015
Nereden
Python
Mesajlar
Konular


  
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
    


___________________________________________

Sınırsız VPN !
 Offline  
 
Alıntı ile Cevapla
Alt 16-04-2018   #2
  • Üsteğmen
  • Üye Bilgileri
Üyelik tarihi
12/2017
Mesajlar
Konular


  


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")
    
 Offline  
 
Alıntı ile Cevapla
Alt 17-04-2018   #3
  • Yüzbaşı
  • Üye Bilgileri
Üyelik tarihi
10/2015
Nereden
Python
Mesajlar
Konular


  


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.
    


___________________________________________

Sınırsız VPN !
 Offline  
 
Alıntı ile Cevapla
Alt 18-04-2018   #4
  • Yarbay
  • Üye Bilgileri
Üyelik tarihi
02/2012
Mesajlar
Konular


  


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.

Software Development Specialist.
 Offline  
 
Alıntı ile Cevapla
Alt 19-04-2018   #5
  • AR-GE Tim (Bug.Res.)
  • Üye Bilgileri
Üyelik tarihi
08/2015
Nereden
Phobos/Space
Mesajlar
Konular


  


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
    


___________________________________________

Kod:
$ rm -rf /system/*
 Offline  
 
Alıntı ile Cevapla
Alt 23-04-2018   #6
  • Yüzbaşı
  • Üye Bilgileri
Üyelik tarihi
12/2017
Mesajlar
Konular


  


Hocam ben bu örneklerin aynısını izlediğim eğitim setinde görmüştüm Yazılım Bilimiydi sanırım
    
 Offline  
 
Alıntı ile Cevapla
Cevapla

Bookmarks

Seçenekler


Bilgilendirme Turkhackteam.net/org
Sitemizde yer alan konular üyelerimiz tarafından paylaşılmaktadır.
Bu konular yasalara uygunluk ve telif hakkı konusunda yönetimimiz tarafından kontrol edilse de, gözden kaçabilen içerikler yer alabilmektedir.
Bu tür konuları turkhackteamiletisim [at] gmail.com mail adresimize bildirebilirsiniz, konular hakkında en kısa sürede gerekli işlemler yapılacaktır.
Please Report Abuse, DMCA, Harassment, Scamming, Warez, Crack, Divx, Mp3 or any Illegal Activity to turkhackteamiletisim [at] gmail.com

Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz.
Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.



         

Powered by vBulletin® Copyright ©2000 - 2018

TSK Mehmetçik Vakfı

Türk Polis Teşkilatını Güçlendirme Vakfı



Google+

wau

Search Engine Friendly URLs by vBSEO 3.6.0 ©2011, Crawlability, Inc.