NESNEYE-YÖNELİK PROGRAMLAMA

Slides:



Advertisements
Benzer bir sunumlar
NESNEYE YÖNELİK PROGRAMLAMA Temel Kavramlar
Advertisements

Algoritma ve Akış Diyagramları
SINIFLAR Yılmaz Kılıçaslan.
TEMEL C PROGRAMLAMA DERSİ - 1
Bölüm 2 C Dilinin Temelleri
C Programlama Diline Giriş
NESNEYE YÖNELİK PROGRAMLAMA
Bilgi Teknolojisinin Temel Kavramları
ALGORİTMA ÖRNEKLERİ Programlamaya Giriş
4 Kontrol Yapıları: 1.Bölüm.
Yazılım Mühendisliği Bölüm - 6 Gerçekleştirim
Javascript Oğuz İNAL.
OOP Tanımlar.
Nesneye Yönelik Programlama
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 6: Sınıflar
Çerez(Cookie) Kullanımı Oturum Yönetimi
NESNEYE YÖNELİK PROGRAMLAMANIN TEMEL İLKELERİ GENEL BİR BAKIŞ
Nesneye Dayalı Programlama
Veri Yapıları Ve Algoritmalar
PROGRAM GELİŞTİRME 1.HAFTA.
Bilgisayar Programlama
Nesneye Yönelik Programlama (2. Sunu). Konsol Üzerinde Türkçe Karakterler Görebilmek İçin…
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
NESNEYE DAYALI PROGRAMLAMA
PROGRAMLAMA DİLLERİ
Görsel Programlama Dr. Muhammet Balcılar
Ses Kontrol Metodlar ile ilgili son birkaç söz Tekrar: Programlama için başlıca 3 model.
DEĞİŞKENLER VE VERİ TİPLERİ
NESNEYE-YÖNELİK PROGRAMLAMA GİRİŞ
PROLOG PROGRAMLAMA DİLİNDE
Kalıtım , Sınıf Asli Ergün.
BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL
Nesneye Dayalı Programlama
isa özkan_ programlama dilleri
Programlama Dili nedir? Programlama Dili nedir?. Programlama Dili: Programcının bir bilgisayara ne yapmasını istedi ğ ini anlatmasının standartlaştırılmış.
DÖNGÜLER.
Ders İçerik Sunusu Maltepe Üniversitesi
C#’TA DÖNGÜLER onbirc.com/133.
MANTIK VE MANTIK PROGRAMLAMA Yılmaz KILIÇASLAN.
Bilgi Teknolojisinin Temel Kavramları
Programlama Dilleri Visual Basic C# C++ Pascal Delphi.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
BURHAN ŞENOL PSİKOLOJİK DANIŞMAN. Okul öncesi dönem Çocukların çoğuna kıyasla daha geç konuşmaya başlaması Telaffuzla ilgili sorunlar yaşaması Sözcük.
PROGRAMLAMA NEDİR?. Genel olarak programlama : Kulanıcıların isteklerinin karşılayacak muhasebe, stok, oyun işletim sistemi gibi programlamaya oluşturacak.
SİSTEM Sistem, bir hedef veya amacı gerçekleştirmek üzere bir arada çalışan birbiriyle ilişkili parçalardan oluşan ve girdi-çıktıları olan sınırları.
İnternet Programlama-I
İsimler ve Bağlanma Names and Bindings
Bölüm 10: Program Ayrıştırma
DERS 4 MİKROİŞLEMCİ PROGRAMLAMA. Dr. Emin Argun Oral, Atatürk Üniversitesi 2008 Ders 4, Slayt 2İÇERİK Yüksek seviyeli programlama dilleri Düşük sevyeli.
Bilgisayar Yazılımları ? ? ? ?
SAYISAL ANALİZ Doç.Dr. Cüneyt BAYILMIŞ.
MANTIK VE MANTIK PROGRAMLAMA Yılmaz KILIÇASLAN. Sunu Planı Bir bilgisayım yöntemi olarak mantıksal çıkarım Prolog programlama dilinin temel yapıları Prolog.
Regüler İfadeler ve Regüler Diller
Genel Kavramlar Bölüm - 1. YAZILIM Bilgisayara işlemler yaptırabilmek ve karar verdirtebilmek için yazılan kalıplara denir. Yazılım, genel olarak donanım.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
NESNE TABANLI PROGRAMLAMA Giriş. Bilgisayar Programlama  Bilgisayar programlama makine yönelimli programlama bakış açısından, dünyayı kavrayış şeklimizi.
BİLGİSAYAR PROGRAMLAMA Araş. Gör. Ahmet ARDAHANLI Kafkas Üniversitesi Mühendislik Fakültesi.
C dili kullanıcıya kendi ihtiyacı olan bir fonksiyonu yazma imkanı vermiştir. Bir sayının faktöriyelini almaya ihtiyaç duyduğumuzu ve aynı zamanda asal.
Nesne Tabanlı Yazılım Geliştirme Bora Güngören Portakal Teknoloji EMO Ankara Şubesi
DİL ÇEVRİMİ Yüksek düzeyli bir dilde yazılmış bir program ancak makine diline çevrilerek bir bilgisayarda çalıştırılabilir.
Nesne Yönelimli Yaklaşım
ARDUİNO Arduino Eğitimleri Bölüm 3 Programlama Dili Temelleri
4- OPERATÖR – koşul - döngü Nesne Yönelimli Programlama - i
Bilgisayar Bilimi Problem Çözme Süreci-2.
ALGORİTMALAR VE PROGRAMLAMAYA GİRİŞ
Akis diyagramı Örnekleri
6-21 EKİM CODE WEEK Göktuğ Usta : Temayı nerden buldun.
BİLGİSAYAR MÜHENDİSLİĞİNE GİRİŞ
TEST.
Sunum transkripti:

NESNEYE-YÖNELİK PROGRAMLAMA Yılmaz Kılıçaslan

PROGRAMLAMA YAKLAŞIMLARI Bir programlama dili algoritmalar ve veri yapılarından oluşur. Programlama dilleri programlamaya yaklaşım açısından 4 gruba ayrılabilir: Prosedür yönelimli diller (örn. Fortran, Pascal) Nesne yönelimli diller (örn. C++, C#, Java) Mantık yönelimli diller (örn. Prolog) Görev yönelimli diller

PROSEDÜR YÖNELİMLİ DİLLERE ALTERNATİF OLARAK NESNE YÖNELİMLİ DİLLER Geleneksel prosedür yönelimli programlama yaklaşımında, bir program gerçekleştirilecek bir dizi işlem adımını, yani bir algoritmayı, tanımlar. Nesneye-yönelik yaklaşımda, bir program birbiriyle etkileşim halinde olan bir nesneler sistemini tanımlar. C++’ı tümüyle prosedürel bir dil olarak kullanabiliriz; fakat, ancak nesneye-yönelik bir yaklaşımla bu dilin bütün potansiyelini açığa çıkarabiliriz.

NESNEYE-YÖNELİK PROGRAMLAMANIN TEMEL KAVRAMLARI Nesneye-yönelik programlamanın temel kavramları, büyük programlar yazmayı kolaylaştıran soyutlama, programları değiştirmeyi ve korumayı kolaylaştıran saklama ve programları kolayca genişletilebilir kılan sınıf hiyerarşisi’dir. Herhangi bir programlama dilinde bu kavramları uygulayabilirsiniz; fakat, nesneye-yönelik programlama dilleri salt bu amaçla tasarlanmışlardır.

SOYUTLAMA “Soyutlama” önemli özelliklere odaklanabilmek için ayrıntıları göz ardı etme sürecidir. Geleneksel olarak, bir programlama dili soyutlama yapmaya izin verdiği ölçüde yüksek-düzeyli (high-level) kabul edilir. C++ (ve diğer nesneye-yönelik programla dilleri) verilen bir işi C’den daha soyut bir tarzda tanımlama imkanı verirken, C de Birleştirici Dillerden daha soyut bir ortam sunar. Bir programın ne yaptığını Birleştirici Dillerden daha ayrıntılı tanımlamak mümkün müdür?

PROSEDÜREL SOYUTLAMA-1 İşlemlere ilişkin ayrıntıları göz ardı etmemize izin veren “prosedürel soyutlama” en yaygın soyutlama tarzıdır. Belirli bir dilde bir program yazarken programcı kendisini bu dilin sunmuş olduğu soyutlama düzeyiyle sınırlamak zorunda değildir. Birçok dil kullanıcı-tanımlı fonksiyonlar (rutinler, prosedürler) yardımıyla prosedürel soyutlama düzeyini daha yukarılara taşımaya izin verir. Fonksiyonlar ile prosedürler arasındaki fark nedir?

PROSEDÜREL SOYUTLAMA-2 Kendi fonksiyonlarınızı yazarak, programın yaptığı bir dizi işleme bir isim vermiş olursunuz. Örneğin, iki karakter katarının aynılığını büyük-küçük harf ayrımı gözetmeksizin test eden aşağıdaki kodu, while (*s != ‘\0’) { if ((*s == *t) || ((*s >= ‘A’) && (*s <= ‘Z’) && ((*s+32) == *t)) || ((*t >= ‘A’) && (*t <= ‘Z’) && ((*t+32) == *s)) ) { s++; t++; } else break; } if (*s == ‘\0’) printf(“esit \n”); else printf(“esit degil \n”); bir fonksiyon içine yerleştirebiliriz: if ( !_stricmp(s, t) ) printf(“eşit \n”)

Neden insanlar ondalık sayma sistemini seçmişlerdir? VERİ SOYUTLAMASI-1 Bir veri tipinin nasıl yapılandığının ayrıntılarını göz ardı etmemize izin veren soyutlama tarzına “veri soyutlaması” denir. Örneğin, bilgisayardaki her tür veri ikili sayılar olarak düşünülebilir. Fakat, birçok programcı ondalık sayılarla düşünmeyi tercih ettiği için, dillerin çoğu tam ve “floating” sayıları destekler. Basic dili karakter katarı (string) tipini bir veri soyutlaması olarak destekler. Diğer yandan, C dili string soyutlamasını doğrudan desteklemez. Bu dilde stringler ardışık bellek hücrelerini işgal eden bir dizi karakter olarak tanımlanmıştır. Neden insanlar ondalık sayma sistemini seçmişlerdir?

VERİ SOYUTLAMASI-2 Prosedürel soyutlama kapasitelerinin aksine, birçok dil yeni veri soyutlaması düzeyleri yaratmak konusunda sınırlı destek sağlarlar. C kullanıcı tanımlı veri tiplerini “structure”lar ve “typedef”ler aracılığıyla destekler. Birçok programcı “structure”ları basit bir değişkenler topluluğu olarak kullanır: struct KisiBilgisi { char isim[30]; long telefon; char adres1[30]; char adrese2[30]; } Bir “structure”ın bildirimini kendisini kullanmamız gereken fonksiyonları belirtmeden yapabiliriz. C dili, içsel olarak birbirlerine bağlı olmalarına rağmen, prosedürel soyutlamayı ve veri soyutlamasını iki ayrı teknik olarak sunar. Bu tekniklerin birleştiği noktada nesneye-yönelik programlama yaklaşımı doğar.

SINIFLAR Nesneye-yönelik programlama, prosedürel soyutlama ve veri soyutlamasını sınıflar biçiminde birleştirir. Bir sınıfı tanımlarken, yüksek-düzeyli soyut bir yapıya ilişkin her şey belirlenir. Bu sınıfa ait bir nesneyi kullanırken, sınıf içinde bildirilmiş veri tipleri ve onlar üzerinde tanımlanmış işlemler göz ardı edilebilir. Bir çokgeni yada bir ağaç yapısını nasıl tanımlarsınız? Bunlar üzerinde hangi işlemleri yapabilirsiniz? Programımızın tasarımını kendi işlem kümelerine sahip soyut veri tipleri etrafında yaparak kendimizi kodlama / gerçekleme detaylarından daha fazla arındırırız. Bu da bizi nesneye-yönelik programlamanın bir diğer avantajına, sarmalamaya, götürür.

SARMALAMA / BİLGİ SAKLAMA “Sarmalama”, soyutlamayı desteklemek yada güçlendirmek için bir sınıfın iç yapısının gizlenmesidir. Bu gizleme, bir sınıfın “görünür” arayüzü ile “özel” gerçeklemesi arasında keskin bir ayrım yapmamızı gerektirir. Bir sınıfın arayüzü o sınıfın ne yapabileceğini, gerçeklemesi ise bunu nasıl yapabileceğini gösterir. Gerçek bir sarmalama, verileri fonksiyonlarla gizlemeyi gerektirir: Fonk. VERİ Fonk. Erişilebilir verili nesne Fonk. Fonk. Fonk. Fonk. VERİ Gizli verili nesne Fonk. Fonk. Fonk.

“Aslan”, “kaplan”, “ayı” ve “inek” türünün üst-sınıfı ne olabilir? SINIF HİYERARŞİSİ Nesneye-yönelik programlamanın, prosedürel programlamada bulunmayan, bir özelliği, tip hiyerarşisi tanımlayabilme yeteneğidir. Örneğin, C Dili bütün veri tiplerini birbirinden bağımsız olarak ele alırken, C++ bir sınıfın başka bir sınıfın alt-tipi olarak tanımlanmasına; sınıflar arası benzerlikleri bir ortak üst-sınıf altında toplamaya izin verir. Birkaç sınıf için ortak bir üst-sınıf tanımlama da bir tür soyutlamadır. Sınıfların ortaklaşa taşıdıkları bazı yönler üzerinde odaklaşıp diğerlerini göz ardı etmeye izin verir. “Aslan”, “kaplan”, “ayı” ve “inek” türünün üst-sınıfı ne olabilir? Bir sınıf hiyerarşisi tanımlamanın 2 pratik faydası vardır: Türetilmiş sınıf üst-sınıfın kodunu paylaşabilir; Türetilmiş sınıf üst-sınıfın arayüzünü paylaşabilir.

KOD KALITIMI Eğer yeni bir sınıf tanımlıyorsanız ve mevcut bir sınıfın işlevselliğinden yararlanmak istiyorsanız, yeni sınıfınızı mevcut sınıftan türetirsiniz. Bu durumda kalıtım mekanizmaları size mevcut kodu yeniden kullanma imkanı sağlar. Örnek: Veri Girişi Formlarının tasarlanması.

ARAYÜZ KALITIMI Bir diğer kalıtım stratejisi, türetilmiş sınıfın üst-sınıfının eleman fonksiyonlarının yalnızca isimlerini kalıtım yoluyla almasıdır. Türetilmiş sınıf bu fonksiyonlar için kendi kodunu kullanır. Arayüz kalıtımının temel faydası çok-biçimliliğe izin vermesidir. Örnek: Farklı veri tiplerindeki form girişleri ayrı ayrı alınır.

için gerekli desteği sağlarlar. ÖZET Sınıflar, Soyutlama Sarmalama Hiyerarşik veri yapılanması için gerekli desteği sağlarlar. Sınıflar, beraberindeki bütün işlemlerle birlikte soyut bir veri tipi tanımlama mekanizmasıdır. Sınıflar, programınızı bölümlere ayırıp yerelliği artırarak sarmalanabilir. Sınıflar, yinelenmiş kodlamayı minimize etmenizi sağlayacak biçimde, kalıtım ve çok biçimlilik tekniklerini kullanarak, aralarındaki ilişkileri gün ışığına çıkaracak bir hiyerarşi içinde organize edilebilirler.

Yapısal programlama yaklaşımında, PROSEDÜREL TASARIM Yapısal programlama yaklaşımında, ilk tasarım adımı programdan beklenen işlevselliği belirlemektir. Yanıtlanması gereken, “Bu program ne yapacak?” sorusudur. Ardından, istenileni gerçekleştirmesi için programın atması gereken temel adımlar yüksek-düzeyli “pseudo” kodlar ya da akış diyagramları yardımıyla belirlenir. Sonrasında, her temel adım daha küçük adımlara bölünerek tasarım daha rafine hale getirilir. Bu yaklaşıma, prosedürel ayrıştırma (“procedural decomposition”) denir.

NESNEYE-YÖNELİK TASARIM Nesneye-yönelik tasarım, prosedürel yaklaşımdan köklü olarak ayrılır. Nesneye-yönelik yaklaşımda problem, İşlemlere yada veri yapılarına bölünmez; Birbirleriyle etkileşen bir nesneler sistemi olarak analiz edilir. Ayrıca, prosedürel yaklaşım yukarıdan-aşağıya işleyen bir analiz tekniği olmasına rağmen, nesneye yönelik yaklaşım yukarıdan-aşağıya analiz ve aşağıdan-yukarıya sentez tekniklerini birleştirir. Nesneye-yönelik tasarım (“iterative” tarzda) şunların yapılmasını gerektirir: Sınıfların belirlenmesi, Özelliklerin ve davranışların tespiti, Sınıflar arası ilişkilerin bulunması ve Sınıfların bir hiyerarşi içinde organize edilmesi.

SINIFLARIN BELİRLENMESİ Nesneye-yönelik tasarımda ilk adım programın ihtiyaç duyacağı sınıfların belirlenmesidir. Bunun için kullanılabilecek basit bir teknik, programdan beklenenin doğal dil ile betimlenmesi, betimleme içindeki isimlerin listelenmesi ve bu liste içinde sınıfların seçilmesidir. Sınıflar en kolay olarak fiziksel nesneleri modelleyen programlar için belirlenir. Fakat, kavramsal nesneler yada olaylar veya etkileşimler söz konusu olduğunda bu işlem daha zor gerçekleştirilir. Ayrıca, problem modeli içindeki elemanlara karşılık gelen sınıflar tespit edildikten sonra bu sınıfları gerçekleştirmek için de yeni sınıflar tasarlamak gerekebilir.

ÖZELLİKLERİN VE DAVRANIŞLARIN TESPİTİ Bir kez sınıflar belirlendikten sonra ikinci adım, her sınıfa ait sorumlulukların belirlenmesidir. Bir sınıfın sorumlulukları iki alanda ortaya çıkar: Taşıması gereken bilgiler (“Sınıfa ait bir nesnenin neleri bileceği”) ve Sınıfa ait bir nesnenin neler yapabileceği yada bu nesneye neler yapılabileceği. Her sınıf kendisini betimleyen bazı özelliklere sahiptir. Sınıfa ait bir nesnenin özellik değerleri nesnenin içinde bulunduğu durumu (“state”) belirler. Özellik değerleri hiç değişmeyeceği gibi sık sık da değişebilir. Her nesne içinde bulunduğu durumu hatırlamak zorundadır. Bir dosya sınıfının içinde bulunabileceği durumu belirtiniz. Her sınıf, ayrıca, nesnelerin diğer nesnelerle nasıl etkileştiğine be bu etkileşim neticesinde içinde bulundukları durumların nasıl değiştiğine karşılık gelen davranışlara sahiptir. Bir yığıt (“stack”) sınıfının davranışları ne olabilir?

SINIFLAR ARASI İLİŞKİLERİN BULUNMASI Bir önceki adımın hemen sonrasında, sınıfların birbirlerinin özelliklerini nasıl kullanacağına karar vermek gelir. Sınıfların bir kısmı yalıtılmış halde bulunabilirken, büyük bir çoğunluğu diğerleriyle işbirliği ve bağımlılık ilişkisi içindedirler. Bir sınıf bir diğerine çeşitli şekillerde bağımlı olabilir: Diğer bir sınıfın eleman fonksiyonlarını kullanması gerekebilir; Diğer bir sınıf kendi içine gömülmüş olabilir; Sınıfın arayüzü bir diğer sınıfa bağımlı olabilir vs. Sınıflar arası ilişkileri belirlerken sınıfların davranışlarını yerine getirirken, birbirlerinin bilgilerini ve davranışlarını kullanıp kullanmadıklarına bakılır.

SINIFLARIN BİR HİYERARŞİ İÇİNDE ORGANİZE EDİLMESİ Sınıf hiyerarşilerinin yaratılması, birinci adımın (sınıflarının belirlenmesinin) devamı niteliğinde bir işlemdir; fakat, ikinci ve üçüncü adımlarda edinilen bilgilere de gereksinim duyar. Sınıfların özelliklerini ve davranışlarını tespit ederek, aralarındaki benzerlik ve farkları daha iyi görürüz; ayrıca, sınıflar arası ilişkileri bularak da hangi sınıfların diğerlerinin işlevselliğine bağımlı olduğunu açığa çıkarırız. Bir banka hesabı sınıfı ve alt-sınıflarının nasıl bir hiyerarşi içinde organize edilebileceğini örnekleyin. Bir sınıfın farklı kategorilerinin tespiti, bir hiyerarşi için yeterli koşulu oluşturmaz. Gerekli koşul farklı kategorilere farklı işlemlerin yapılacak olmasıdır.