NESNEYE YÖNELİK PROGRAMLAMANIN TEMEL İLKELERİ GENEL BİR BAKIŞ

Slides:



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

Yığınlama Sıralaması (Heap Sort)
Fonksiyonlar - Functions
Ayrık Yapılar Algoritma Analizi.
IT503 Veri Yapıları ve algoritmalar
MIT503 Veri Yapıları ve algoritmalar Algoritma Oluşturma – Açgözlü algoritmalar ve buluşsallar Y. Doç. Yuriy Mishchenko.
SINIFLAR Yılmaz Kılıçaslan.
TEMEL C PROGRAMLAMA DERSİ - 1
Bölüm 2 C Dilinin Temelleri
NESNEYE YÖNELİK PROGRAMLAMA
NESNEYE YÖNELİK PROGRAMLAMA
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
OOP Tanımlar.
NESNEYE DAYALI MODELLEME VE TASARIM
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 6: Sınıflar
Çerez(Cookie) Kullanımı Oturum Yönetimi
Yazılım Proje Yönetimi
Nesneye Dayalı Programlama
Görsel C# ile Windows Programlama
Bilgisayar Programlama
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
NESNEYE DAYALI PROGRAMLAMA
Bilgisayar Programlama Güz 2011
Görsel Programlama Dr. Muhammet Balcılar
DEĞİŞKENLER VE VERİ TİPLERİ
NESNEYE-YÖNELİK PROGRAMLAMA GİRİŞ
Derleyici Teorisine Giriş
PROLOG PROGRAMLAMA DİLİNDE
Bilgisayar Programlama
Chapter 1: Giriş.
NESNEYE-YÖNELİK PROGRAMLAMA
Kalıtım , Sınıf Asli Ergün.
BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL
Nesneye Dayalı Programlama
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
BİLGİSAYARLI KONTROL LABVIEW
MANTIK VE MANTIK PROGRAMLAMA Yılmaz KILIÇASLAN.
Bilgi Teknolojisinin Temel Kavramları
Şahin BAYZAN Kocaeli Üniversitesi Teknik Eğitim Fakültesi
Programlama Dilleri Visual Basic C# C++ Pascal Delphi.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
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ı.
İ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.
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.
NESNE TABANLI PROGRAMLAMA Giriş. Bilgisayar Programlama  Bilgisayar programlama makine yönelimli programlama bakış açısından, dünyayı kavrayış şeklimizi.
JAVA 1. GİRİŞ & TARİHÇE Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmıştır. Açık kodlu. Nesneye yönelik. Düzlemden.
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
C Programlama Dili Bilgisayar Mühendisliği.
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
Nesneye Dayalı Programlama Temel Kavramlar Hüseyin ESKİ.
Bütün dünyayı nesneler (object) ve nesneler arası ilişki olarak gören model kullanılarak yapılan programlama. Bu programlama tekniğine göre her nesne.
Problem Çözme Yaklaşımları
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.
BİLGİSAYAR MÜHENDİSLİĞİNE GİRİŞ
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

NESNEYE YÖNELİK PROGRAMLAMANIN TEMEL İLKELERİ GENEL BİR BAKIŞ Yılmaz Kılıçaslan

Sunum Planı Bir önceki derse bağlantı Programlama yaklaşımları Nesneye-Yönelik Programlamanın İlkeleri Soyutlama Saklama Kalıtım Çok biçimlilik SINIF SINIF HİYERARŞİSİ

Bir Önceki Derse Bağlantı Gerçeğin bütün düzlemleri karmaşıklığın üstesinden gelmek için, bölümleyerek soyutlama ilkesini kullanır. Dijkstra’nın belirttiği gibi, karmaşıklıkla nasıl baş edleceği antik dönemden beri bilinmektedir: “böl ve yönet” (divide et impera – divide and rule).

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) Fonksiyon yönelimli diller (örn. Lisp) Nesne yönelimli diller (örn. C++, C#, Java) Mantık yönelimli diller (örn. Prolog)

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 ise, 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 ve programları değiştirmeyi ve korumayı kolaylaştıran saklama kalıtım ve çok biçimliğe izin veren ve programları kolayca genişletilebilir kılan sınıf hiyerarşisidir. Herhangi bir programlama dilinde bu kavramları uygulayabilirsiniz; fakat, nesneye-yönelik programlama dilleri salt bu amaçla tasarlanmışlardır.

SOYUTLAMA - 1 “Soyutlama” , belirli bir bakış açısından, önemli özelliklere odaklanabilmek için ayrıntıları göz ardı etme sürecidir.

SOYUTLAMA - 2 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.

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.

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”)

PROSEDÜREL DEKOMPOZİSYON 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.

PROSEDÜREL DEKOMPOZİSYON "Structured programming appears to fall apart when applications exceed 100,000 lines or so of code" (Stein 1988)

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.

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]; }

Nesne: Prosedürel Soyutlama + Veri Soyutlaması 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 nesne-tabanlı ya da 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.

SARMALAMA 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 = Bilgi 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.

Verileri Fonksiyonlarla Gizleme Gerçek bir sarmalama, verileri fonksiyonlarla gizlemeyi gerektirir: Fonk. Erişilebilir verili nesne VERİ Fonk. Fonk. Fonk. Fonk. Fonk. Gizli verili nesne VERİ Fonk. Fonk. Fonk.

Parça bütün ve alt-sınıf üst sınıf hiyerarşileri

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 odaklanıp diğerlerini göz ardı etmeye izin verir. 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.

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.

ÖZET NYP’de sınıflar, Soyutlama Sarmalama Hiyerarşik veri yapılanması için gerekli desteği sağlarlar.

Kaynaklar Robert, L. 2002. Object-Oriented Programming in C++. S˄MS, Indianapolis, Indiana. Stein, J. March 1988. Object-Oriented Progran-iming and Database Design. Dr. Dobb'sjoumal of Software Tbolsfor tbe Professional Programmer, No. 137, p. 18.