nesneye yönelik programlamanın temel özellikleri / One moment, please...

Nesneye Yönelik Programlamanın Temel Özellikleri

nesneye yönelik programlamanın temel özellikleri

kaynağı değiştir]

Nesne yönelimli programı, 1960 yılında  Norveç’li Norsk Resgnesentral tarafından icat edildi. Resgnesentral, ilk nesle odaklı dili olan Simula’yi üretti. 1961 yılında Simula l sınıflandırması ve sınıfların kullandığı nesneleri kullanılmaya başladı. 1967’de Ole-Johan Dahl ve Kristen Nygaard Simula 67’yi keşfetti. Simula 67, nesne yönelimlin ilk dili olarak kabul edildi ve nesne yönelimli olma kriterlerini karşılıyor. Algo 60 temelini Simula’yi olusturmak icin kullanılmışteır. Simula üniversite dışında pek ilgi görmedi.

1970 yılındaki yazılım krizinde modülerleştirmede yeni doğan dillerde nesne yönelimli olmasa da ona gerekli olan veri türü kavramını içeriyordu. Bu diller sayesinde, nesne yönelimli programlar geliştirildi.

1980 yılında ise yeni nesne yönelimli diller üretildi, örneğin Objective-C, C++ ve Eiffel. Nesne yönelimli diller üretildiğinde nesne yönelim yeri yazılımda sağlama alindi. 1990’larda nesne yönelimli programlama yaygınlaştı bunun sebebi ise doksanlarda grafik kullanıcı arayüzlerinin popülerliğinin artmasıydı.

Son zamanlarda, nesne yönelimli programların değeri daha’da artti, çünkü nesne yönelimli programların verimli ve bakımını kolay elde etmek icin büyük katkıda bulunyor. Günümüzde yaygin olan Python ve Ruby dilleri, prosedürel programlama dilleri ile uyumludur. Ticari açıdan ise muhtemelen en önemli programa dili ise Java’dır. Java’nin kurucusu Sun Microsystems ayni zamanda C# ve Visual Basic.NET’in (VB.NET olarak da bilinir) kurucusudur.[1]

Kaynakça[değiştir

Nesne ve Nesne Yönelimli Programlama Teorisinin 4 Temel Özelliği

Nesne Yönelimli Programlama Teorisi'nde 4 temel özelliğin gerçekleştirilmesi zorunlu sayılmıştır ve bu temel özelliklerden birini bile sağlamayan bir dil saf (pure) Nesne Yönelimli Programlama Dili sayılmaz.

Bu 4 temel özellik;

1. Soyutlama (Abstraction)

Soyutlama denilince, nesneyi bazı karakteristikleri olan ve bazı eylemleri gerçekleştirebilen bir veri tipi olarak genelleştirmek anlaşılmalıdır. Yeryüzü üzerinde bulunan her şey bir nesnedir. Bilgisayar yazılımı açısından nesne, bir varlığın temsil biçimidir. Örneğin; bina bir nesnedir. Binayı bilgisayar yazılımı içinde temsil etmek istersek, öncelikle bu nesnenin yani binanın ayırt edici özelliklerini belirlemeliyiz.

Örneğin;

  • Bina yüksekliği

  • Dış yüzey rengi

  • Kat sayısı

  • Zemin alanı

  • Zemin boyutları

gibi özellikler, binayı temsil etmek için ilk akla gelen birkaç özelliktir. O halde nesnenin bilgisayarda temsilinde, özellikleri kilit rol oynamaktadır.

Nesnenin karakteristikleri, özellikler ve gerçekleştirebileceği eylemler de metot adını alır. Bu anlamda, soyutlaştırmanın sonucunda bir nesne;

  • Özellikleri (properties, member variables - Objective-C)

  • Metotları (methods) ile temsil edilebilir.

Nesne Yönelimli Programlama Dilleri, soyutlamayı sınıf (Class) yapısı ile gerçekleştirirler. Sınıf yapısı içinde o nesneye ait özellikler ve metotlar tanımlanabilir.

Ancak sınıf soyut bir yapıdır ve doğrudan kullanılamaz. O sınıftan üretilen örnekler sınıfa ait tüm özelliklere ve metotlara sahip olurlar. Bunlar program içinde doğrudan kullanılabilirler. Sınıftan üretilen her örnek, aynı özellik ve metotlara sahip olacak ancak özelliklerin değerleri doğal olarak farklı olabilecektir.

Örneğin, insanı bir nesne olarak düşünürsek ve insan sınıfı olarak soyutlarsak, ilk akla gelen özellikleri; boy, kilo, IQ ve EQ değerleri, eğitim düzeyi vb. gibi özellikler olur. Bu özelliklerin değerleri doğal olarak her insan için farklıdır. İnsan için ilk akla gelen eylemler (metotlar) ise; yürüme, okuma-yazma, konuşma, araç kullanma vb. gibi metotlardır.

2. Sarmalama / Paketleme (Encapsulation)

Paketlemenin anlamı; sınıfı oluşturan metot ve özelliklerin gerçekleştirme biçiminin, bu sınıfı kullanacak olan kullanıcılardan gizlenmiş olmasıdır.

NESNE = VERİ + METODLAR

şeklinde ifade edilen bağıntı aslında Nesne Yönelimli Programlama'nın temelini açıklamaktadır. Veri (özellikler) ve veri üzerinde işlem yapan kod (metotlar) bir arada bulunur ve nesneyi oluşturur. Nesneyi tanımlayan sınıfın iç ayrıntıları, normal olarak programın artakalan kısmı için görünür değildir.

Bir nesne sınıfının gerçekleştirimini değiştirirsek, yani aynı sınıfı metot ve özellikleri aynı kalmak koşuluyla farklı bir programlama tekniğiyle oluşturursak, o sınıfın dış dünyaya olan arayüzü değişmediği sürece (metot ve özellikler aynı kaldığı sürece) bu sınıfı kullanan program kodlarınızda bir değişiklik yapmamıza gerek kalmayacaktır.

3. Miras Alma (Inheritance)

Nesneye yönelik programlamada, bir nesne, genellikle bir nesne sınıfına ait bir örnektir (instance).

Örneğin, Albert Einstein, insan sınıfının bir örneğidir. Bir nesne sınıfından alt sınıflar (subclasses) oluşturulabiliyorsa, türetme özelliği (derivation) var demektir. Örneğin insan sınıfı, canlı sınıfının bir alt sınıfıdır.

Kendisinden alt sınıf üretilen sınıfa, temel sınıf (baseclass) veya süper sınıf (superclass) veya ana sınıf (parentclass) adı verilir.

Subclass yerine child class terimi de kullanılmaktadır.

Alt sınıfın nesneleri, türetildikleri temel sınıfa ait özellikleri alıyorsa, burada miras alma (inheritance) özelliği vardır denir.

Bu anlamda, miras alma özellikli bir nesne yönelimli programlama dilinde, bir nesne sınıfından türetilen alt nesne sınıfına ait nesneler, üst sınıfın özelliklerini (properties) ve metodlarını (methods) aynen alırlar.

4. Çok Biçimlilik (Polymorphism)

Farklı nesnelerin, aynı mesaja (olaya ya da uyarıma) farklı şekillerde cevap verebilme yeteneğidir.

Her nesne sınıfı, kendi metotlarını paketlediği için ve bu metotlar programın kalan kısmı için gizli olduğundan, farklı sınıflar aynı isimde bazı metotlara sahip olabilirler.

Örneğin ŞEKİL adlı bir süper sınıfımız (super class) olsun. Bu sınıftan,DAİRE, KARE ve ÜÇGEN adlı 3 alt sınıf türettiğimizi varsayalım. Bu alt sınıfların her biri kendi örneklerini çizmek için ÇİZadlı bir metoda sahip olabilir. Fakat, her bir alt sınıf için bu metot aynı olmasına karşın, bu metodu devreye sokmak için gönderilecek mesajdan sonra her alt sınıfa ait nesne farklı bir şekil (yani kendini, yani bir üçgen, daire veya kare) çizecektir.

Nesne Yönelimli Programlamanın sınıf türetebilme özelliği sayesinde, bir nesne hiyerarşisi oluşturma imkânı bulunnmaktadır.

kaynağı değiştir]

NYP'yi destekleyen programlama dilleri genellikle tekrar kullanım ve genişletilebilirlik açısından, prototipler ve sınıflar şeklinde kod kalıtımına sahiptirler ve NYP deki nesneler kimi zaman gerçek dünyada bulunan şeylere karşılık gelebilir. Mesela bir grafik programı "kare", "üçgen" ve "yuvarlak" gibi nesnelere sahip olabilir. Bazen nesneler daha soyut şeyleri de temsil edebilirler, mesela bir hesap makinesi programı logaritma almanızı ya da metreyi fite çevirmenizi sağlayacak nesnelere sahip olabilir. İşte bu bahsi geçen nesneler belli sınıflar altında bulunurlar, mesela "Kasım" adında bir nesne Aylar sınıfının bir üyesi olabilir ya da "Faktöriyel" olarak isimlendirilmiş bir nesne Fonksiyonlar sınıfında yer alıyor olabilir.

Tarih[değiştir

Selamlar,
    İlgilenenler  için faydalı olabileceği düşüncesiyle eski yazılarımdan bazı hazır içerikleri blog'umda yayınlayacağım. Umarım ilginizi çeker.


Esen Kalın.

     Nesne yönelimli programlama 80’li yıllarda C++ ile popüler olan bir kavramdır.Sunduğu yeniden kullanım , kolay anlaşılırlık , kolay adaptasyon vb. özelikleri ile dikkat çekmiştir.Günümüzde yazılım geliştiricilerin çoğu bu disiplin ile yazılım geliştirmektedir.

   Nesne yönelimli programlamada  karşımıza çıkan en temel kavram sınıf(class) kavramıdır.Nesne yönelimli programlama  bize gerçek dünyaya daha yakın bir programlama imkanı sunar.Gerçek dünyada biz nasıl etrafımızdaki tüm nesneleri özellikleri ve davranışları ile tanımlıyorsak , nesne yönelimli programlamada da aynı şekilde tanımlamaktayız. Örneğin yazı yazdığımız kalemi cinsi , boyu , rengi gibi özellikleri ile tanımlarız.Bunun yanı sıra kalem kağıt üzerinde yazı yazma davranışı sergiler.



   

   Sınıf aynı özellik , nitelik , davranış ve anlamı taşıyan nesnelerin kalıbıdır  diyebiliriz.Sizin mavi renkli yazan dolmakaleminiz de , kurşun kaleminiz de sonuçta  kalem sınıfının birer örneğidir.Birbirlerinden farklı nitelikler taşısalar da ortak özellik (attributes)  ve davranışlar (behaviours) ile tanımlanmaktadırlar.Kalem sınıfı şu şekilde tanımlanabilir :

  Sınıfların özellikleri dilin doğal değişken tiplerinden oluşabileceği gibi başka sınıflardan da oluşabilir.Örneğin kalem kutusu diye bir sınıf tanımlansa muhtemelen özellikleri içerisine sahip olduğu kalemlerin de yani kalem sınıfının da konması gerekecektir.Bu durumda kalem kutusu sınıfı aynı zamanda kalem sınıfı ile  ortaklık (association) kurmuş olarak adlandırılır.Bu ilişki “kalem kutusu  kalemlere sahiptir” şeklinde okunabilir.

Bu ilişkiye sahiplik (has a) ilişkisi denir.Eğer bir nesnedeki  her zaman bir diğerini de etkiliyorsa ya da var olmak için diğerine ihtiyaç duyuyorsa o zaman burada bir bağımlılık (dependency) ilişkisi vardır. Örneğin departman ile çalışanlar arasında ki ilişki gibi.Çalışanları olmıyan bir departman hiçbir zaman var olamaz.

  Sınıfın  yaratılan bir  örneğine (instance) ise nesne (object) diyoruz.Bu durumda mavi renkli yazan dolmakaleminiz , kalem sınıfının bir örneği (instance) olan bir nesne (object) olur.

 

  Nesne yönelimli programlamada nesneler birbirlerinin fonksiyonlarını kullanmazlar.Bunun yerine birbirleriyle mesajlar (messages)  aracılığıyla haberleşirler.Görünüşte fonksiyonel yapıyla benzeşse de kavramsal olarak tamamen farklıdır.Sınıflar bir fonksiyonlar topluluğu değildir.Sınıf belli bir kavramın bilgisayar dilinde somutlaştırılmış halidir.Nesnelerin birbirlerine mesaj göndermesi sundukları methodlar (methods) üzerinden parametreler aracılığıyla (Örn. Kalem sınıfındaki yaz methodu) olur. Methodlar sınıfın dışarıya sunduğu arabirim oldukları gibi (her method dışa açık değildir) davranışlarında gerçekleştirildiği birimlerdir.

  Burada daha fazla ilerlemeden nesne yönelimli programlamanın dört temel ilkesi üzerinde durmak faydalı olacaktır.Bu ilkeler :

  1. Soyutlama (Abstraction)
  2. Kapsulleme (Encapsulation)
  3. Kalıtım (Inheritence)
  4. Polimorfizm (Polymorphizm)

olarak anılırlar.

   Sınıfların belli kavramların bilgisayar dilinde somutlaştırılmış hali olduğundan bahsetmiştik. Kavramların özelliklerinin ve davranışlarının tanımlanmasına biz soyutlama diyoruz.Bir başka deyişle soyutlama , bir sınıfın , sınıf olmasını sağlıyan şeylerin tanımlanmasıdır diyebiliriz.Örneğin araba ve gemi her ikisi de birer taşıttırlar .Ancak belli özellikleri ile birbirlerinden ayrılırlar. Örneğin araba sınıfını tekerlek sayısı , ağırlığı , hızı , motor gücü , kaç kapılı olduğu vb. özellikleri ile yürümesi , hızlanması , durması vb. davranışları ile  tanımlayabiliriz.

   Sınıfın belli bir kavramı temsil etmesinin yanı sıra kavram karmaşası da yaratmaması gerekir.Her sınıf kavramsal olarak bir düşünceye isabet etmelidir.Örneğin bir yolcu uçağı ile bir savaş uçağı birbirlerine çok benzeştikleri halde ayrı sınıflardır ve bunu belirtecek şekilde tanımlanmalıdırlar.Kavramsal olarak bir düşünceyi temsil eden ve karmaşıklık yaratmayan sınıflar uyumlu ( cohesive ) sınıflar olarak anılırlar. Programlamanın belki de en önemli ilkesi düşüncenin basit tutulmasıdır.Uyumluluk (cohesion) bu ilkenin nesne yönelimli programlamada adlandırılmasıdır denilebilir.

   Niteliklerin ve davranışların sınıflarda bir arada bulunmasına kapsulleme denir.Bir başka deyişle kavram nitelikleri ve davranışları tanımlanarak – ya da soyutlanarak -  bir sınıf içerisinde kapsullenir. Kapsulleme aynı zamanda sınıfın hangi niteliklerinin ve davranışlarının dışarıya sunulup sunulmıyacağını da belirler.Sınıfın tüm nitelik ve methodları dış dünyaya açık olmak zorunda değildir.Yine basit olma ilkesinden hareketle , gereksiz method ve niteliklerin dışarıya açılması kafa karıştırıcı ve gereksiz bir eylem olacaktır.Örneğin bir insan sınıfı tanımlarken muhtemelen karaciğerinin büyüklüğü bizi hiç ilgilendirmemektedir.Ancak bu sınıfın böyle bir özelliği vardır ve sınıfın kendi iç çalışması için gereklidir.Bilgilerin bu şekilde gizlenmesine bilgi saklama (information hiding) denir.

   Sınıfın nitelikleri ve methodları public , protected , private , package (friend) gibi terimlerle dışa olan açıklığı , görünürlüğü belirlenir.

  • Public : Dışa açık ve herkez tarafından erişebilen elemanlardır
  • Protected : Dış erişime kapalı sınıf içinde ve alt sınıflarda da kullanılabilen elemanlardır
  • Private : Sadece o sınıf içinde kullanılabilen , alt sınıflar tarafından da kullanılamıyan elemanlardır
  • Package (friend) : Ait olunan  paket içindeki sınıflar tarafından kullanılabilen , paket dışı erişime kapalı elemanlardır

   Nesne yönelimli programlamada sınıflar birbirlerinden türiyebilirler.Alt sınıflar (sub classes) türedikleri üst sınıfın (super class) tüm özellik ve davranışları aynen alırlar.Bu özelliğe kalıtım(inheritance) özelliği denir.Bunun anlamı , alt sınıfların  üst sınıfların  nitelik ve methodlarını sanki kendi üzerlerinde kodlanmış gibi kullanabilmeleridir.Örneğin araba ve gemi her ikiside birer taşıttır.Taşıtların ortak özellikleri kapasitesi , gitmesi , durması ,  hızlanması vb. sayılabilir.Aslında hem gemi hem araba için bunlar aynıdır ve ortak bir üst sınıfta toplanabilirler.Kalıtım özelliği aynı kodun yeniden kullanımı için sunulan çok güzel bir yöntemdir.

  

   Bazı dillerde bir sınıf sadece bir başka sınıftan kalıtım alabilirken (türiyebilirken) bazı dillerde bu birden fazla sınıftan olabilir.Bu özelliğe çoklu kalıtım (multi inheritence) denir.

   Araba ve taşıt örneğindeki ilişki “araba bir taşıttır” (“is a “ ilişkisi)  olarak okunur ve bu ilişkiye genelleştirme de ( generalization )  denir.Alt sınıflar aynı zamanda üst sınıf özellikleri de taşıdıklarından yazılım içinde sanki üst sınıfmış gibi ya da onun yerine de kullanılabilirler.

  

   Nesne yönelimli programlamada bazı üst sınıflar bazı methodlarını alt sınıflarda tamamlanmak üzere sadece tanımlayarak (sadece methodu belirterek ) bırakabilirler . Bu tip sınıflara soyut (abstract) sınıf adı verilir.Tüm methodları sadece tanımlanmış ama kodlanmamış sınıflara arabirim (interface) adı verilir. Tüm kodlaması tamamlanmış sınıflar ise somut (concrete) sınıf olarak adlandırılır.Somut bir sınıfın soyut bir sınıftan türediği ilişki türüne gerçekleştirme (realization) adı verilir.Bu tarz üst sınıflar alt sınıflara yeniden kullanılabilir davranışlar verilemediği ancak davranış kalıbının belirlenmek istediği durumlarda kullanışlıdır.

 

  Yeniden kullanılabilirliği arttırmak için sınıflar dizayn edilirken kavramlar genelden özele doğru kategorize edilmeli ve gerekli üst sınıflar ortaya çıkarılmalıdır.Bazı durumlarda kendi başına anlam ifade etmeyen hatta tamamen soyut üst sınıfların ortaya çıkması tamamen doğal birşey olarak algılanmalıdır.

   Alt sınıflar üst sınıflarda belirlenmiş davranışlara aynı tepkileri vermek zorunda değildir. Yine taşıt örneğinden yola çıkarsak gitmek davranışı araba ve gemi için farklı şekillerde olur.Biri yürüken diğeri yüzer ancak sonuçta her ikisi de gitme eylemini gerçekleştiriyordur.Alt sınıfların bu şekilde farklılıklar gösterebilmesi özelliğine  polimorfizm denir.Bu özellik pratikte üst sınıf tarafından sunulan methodların üzerinin yazılması (method overriding) ile olur.Alt sınıf methodu kendine göre değiştirerek ezer.Ancak methoddan beklenen sonucun tipi değiştirilemez.

 

  Alt sınıflar doğaları gereği üst sınıflara göre ek özelliklerle ve  veya davranışlar göstermek zorundadırlar.

   Nesneler işlevlerini yerine getirmek için başka nesnelere ihtiyaç duyabilir. Nesneler arasında  ister diğer nesnenin bir nitelik olarak tanımlanması olsun , ister bir mesajlaşma şekilde olsun , kurulan ilişkiler (kalıtım ilişkisi dışında) eşleme ( coupling ) olarak adlandırılır.Bir nesneye  çalışmak için ihtiyaç duyduğu sınıf (nesne değil) sayısı kadar eşleme yapılmış olur.Eşleme kavramı sınıfın karmaşıklığı ile direk alakalıdır.Sonuçta nesne ile diğer sınıflar ile ne kadar çok eşleme yapılmış ise çalışma sisteminin çözülmesi o kadar karmaşık olacaktır.Bu kavram prensipleri ve metrikleri açıklarken oldukça sık karşımıza çıkacaktır.

   Nesneler dünyasında sıklıkla karşımıza çıkacak bir kavramda durum (state) kavramıdır.Nesnenin niteliklerinin belli bir andaki durumu özellikle nesnenin yaşam döngüsünün tariflemesinde önemlidir.Bazı sınıfların yapısı ve anlaşılması son derece karmaşık olabilir.Nesneler çeşitli durumlarında farklı davranışlar da gösterebilirler.Nesnenin bir durumdan diğerine geçmesine durum değişikliği (state change) denir.Bu durum değişikliğine ise olaylar (events) sebep olurlar.(Örneğin bazı tip mesajların gönderilmesi gibi) .Durumlar ,  olaylar ve durum geçişleri bize kavramsal olarak bir kolaylık sağlar.Olay yönelimli (event driven) programlama yapısıda bunun üzerine kurulmuş bir yapıdır.

nest...

oksabron ne için kullanılır patates yardımı başvurusu adana yüzme ihtisas spor kulübü izmit doğantepe satılık arsa bir örümceğin kaç bacağı vardır