NESNE TABANLI PROGRAMLAMA Giriş. Bilgisayar Programlama  Bilgisayar programlama makine yönelimli programlama bakış açısından, dünyayı kavrayış şeklimizi.

Slides:



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

NESNEYE YÖNELİK PROGRAMLAMANIN TEMEL İLKELERİ GENEL BİR BAKIŞ
NESNEYE-YÖNELİK PROGRAMLAMA
ODTÜ Bilgisayar Mühendisliği Tanıtım Günleri Temmuz 2005.
Algoritma.  Algoritma, belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.  Başka bir deyişle; bir sorunu çözebilmek için gerekli olan.
Veri Tabanı Yönetim Sistemleri Hafta 1. 2 Temel Kavramlar Veri Olguların, kavramların, veya talimatların, insan tarafından veya otomatik yolla iletişim,
YAPIM KUŞAĞI ÜRETİYORUM ETKİNLİĞİ.
Bilimsel bilgi Diğer bilgi türlerinden farklı
Stratejik Pazarlama 4. Hafta
BİLGİSAYAR PROGRAMLAMA Ders 11: İşaretçi (Pointer) Kullanımı Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
Hazırlayan: Dr. Emine CABI
Zihinsel engellilerin sınıflandırılması
TC Windows Editörü DevC++. KURULUM PROGRAMIN KURULACAĞI YER BURADA BELİRLENİYOR.
BULUŞ YOLUYLA ÖĞRETİM JEROME BRUNER.
İNSAN BİLGİSAYAR ETKİLEŞİMİ: BİLİŞSEL BOYUT III. İBE alanında etkileşimi anlamaya çalışan uzmanlar, özellikle şema ve zihinsel modeller üzerinde yoğunlaşırlar.
İŞLETİM SİSTEMLERİ ISE 206 DR. TUĞRUL TAŞCI. Dersin Amacı Bilgisayar sistemlerinin temel organizasyonunu tanımak İşletim sistemlerinin ana bileşenlerini.
Bağlama ve Kapsam Kavramları
Yazılım Mühendisliği1[ 3.hft ]. Yazılım Mühendisliği2 Yazılım İ sterlerinin Çözümlemesi Yazılım Yaşam Çevrimi “ Yazılım Yaşam çevrimin herhangi bir yazılım.
Sözsüz İletişimin Özellikleri
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
BSM208 PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Dil Çevrimi (Hafta4) 1.
Bölüm 2 C Dilinin Temelleri
Pazarlama İlkeleri.
BİLGİSAYAR PROGRAMLAMA DERSİ
SAYILAR ve RAKAMLAR.
İŞLETİM SİSTEMLERİ ISE 206 Dr. Tuğrul TAŞCI.
Algoritma ve Programlamaya Giriş
Sıklık Dağılımları Yrd. Doç. Dr. Emine Cabı.
ARAÇ GEREÇLERİN EĞİTİMDEKİ YERİ VE ÖNEMİ
Problem Çözme ve Algoritmalar
MODEL YETERSİZLİKLERİNİ DÜZELTMEK İÇİN DÖNÜŞÜMLER VE AĞIRLIKLANDIRMA
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 6: Sınıflar
İleri Algoritma Analizi
Teknolojİ ve tasarIm dersİ
BİYOİNFORMATİK NEDİR? BİYOİNFORMATİKTE KULLANILAN SINIFLAMA YÖNTEMLERİ
İNSAN BİLGİSAYAR ETKİLEŞİMİ: BİLİŞSEL BOYUT III
STORAGE BÜŞRA KARADENİZ
Nesneye Dayalı Kavramlar Uygulama 2
PHP ile Nesneye Yönelik Programlama
PROBLEM ÇÖZME VE ALGORİTMALAR
Pascal’da Kullanılan Standart Prosedür ve Fonksiyonlardan Bazıları
3.hafta METODLAR.
Soyut veri tipleri ve kapsülleme kavramları
Bölüm 7 İfadeler ve atamalar.
BİLGİSAYAR programlama II
KAVRAM HARİTALARI.
NİŞANTAŞI ÜNİVERSİTESİ
Arduino Programlama Dili
MİKROİŞLEMCİLER VE MİKROBİLGİSAYARLAR
EĞİTİME GİRİŞ Mehmet Akif Ersoy Üniversitesi
TEKNOLOJİ VE TASARIM DERSİ 7.D.1. Özgün Ürünümü Tasarlıyorum.
NİŞANTAŞI ÜNİVERSİTESİ
Doğrusal Mantık Yapısı İle Problem Çözme
ÖĞRENME STİLLERİ.
NİŞANTAŞI ÜNİVERSİTESİ
Bilgisayar Bilimi Koşullu Durumlar.
İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar)
NİŞANTAŞI ÜNİVERSİTESİ
Değerler ve Değişkenler
DİL GELİŞİMİ KURAMLARI - II
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
BLM-111 PROGRAMLAMA DİLLERİ I Ders-10 Diziler
Pascal’da Kullanılan Standart Prosedür ve Fonksiyonlardan Bazıları
MTM216 GÖRSEL PROGRAMLAMA
Ders İçeriği Nicel araştırma adımları
Bilimsel Araştırma Yöntemleri
AÇIK UÇLU ÖĞRENME ORTAMLARI
Sunum transkripti:

NESNE TABANLI PROGRAMLAMA Giriş

Bilgisayar Programlama  Bilgisayar programlama makine yönelimli programlama bakış açısından, dünyayı kavrayış şeklimizi yansıtan kavramlar ve metaforlara dayalı programlamaya doğru bir gelişim göstermiştir. 2

Programlamanın Gelişimi  Programlama paradigmalarının izlediği gelişim şekli şöyledir:  Makine dili  Assembly (birleştirici) diller  Makineden bağımsız programlama dilleri  Prosedürler ve fonksiyonlar  Nesneler 3

Makine Dili – Mark I

Assembly Dili – Macro-11 GCD:TSTB BEQSIMPLE MOVA, R5 SXTR4 DIVB, R4 MOVB, A MOV R5, B CALLGCD SIMPLE:RETURN 5

Makineden Bağımsız Programlama Dili – Fortran ! This example program solves for roots of the quadratic equation, ! ax^2 +bx +c =0,for given values of a, b and c. ! PROGRAM bisection IMPLICIT NONE INTEGER :: iteration DOUBLE PRECISION :: CC, Er, xl, x0, x0_old, xr ! Set convergence criterion and guess for xl, xr. CC = 1.d-4 xl = 8.d-1 xr = 11.d-1 6 ! Bisection method. Er =CC +1 iteration = 0 DO WHILE (Er > CC) iteration = iteration + 1 ! Compute x0 and the error. x0_old = x0 x0 = (xl + xr) / 2.d0 Er = DABS((x0 - x0_old)/x0)*100.d0 WRITE (*,10) iteration, x0_old, x0, Er 10 FORMAT (1X,I4,3(2X,E10.4))

Prosedür ve Fonksiyonlar – Pascal program ValueArg(output); {Shows how to arrange for a procedure to have arguments.} procedure PrintInitials(First, Last : char); {Within this procedure, the names First and Last represent the argument values. We’ll call write to print them.} begin write(‘My initials are: ’); write(First); writeln(Last) end; {PrintInitials} begin PrintInitials (‘D’, ‘C’); {Any two characters can be arguments.} PrintInitials (‘Q’, ‘T’); {Like strings, characters are quoted.} PrintInitials (‘&’, ‘#’) end. {ValueArg} 7

Yazılım Bunalımı 8

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

Prosedür Yönelimli Dillere Alternatif Olarak Nesne Tabanlı Diller  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.  Java’yı 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. 10

Nesne Tabanlı Programlamanın Temel Kavramları  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. 11

Soyutlama “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.  Java (ve diğer nesneye-yönelik programlama 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. 13

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. 14

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”) else printf(“esit degil \n”); 15

Prosedürel Ayrıştırma  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. 16

Prosedürel Ayrıştırma 17

Veri Soyutlaması-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. 18

Veri Soyutlaması-2  Prosedürel soyutlama kapasitelerinin aksine, birçok dil yeni veri soyutlaması düzeyleri yaratmak konusunda sınırlı destek sağlar.  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]; } 19

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. 20

Sınıflar  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. 21

Sınıflar ve Nesneler  Bir sınıf nesneleri oluşturmada kullanılan bir prototiptir.  Java gibi nesne tabanlı bir dilde kod yazdığımızda sonrasında nesneleri oluşturmada kullanacağımız sınıfları tanımlarız.  Bir sınıf nesneleri oluşturmada kullanacağımız en az bir yapıcı (constructor) fonksiyona sahiptir. 22

Time sınıfı 23 class Time { private int hour, minute; public Time (int h, int m) { hour = h; minute = m; } public void addMinutes (int m) { int totalMinutes = ((60*hour) + minute + m) % (24*60); if (totalMinutes<0) totalMinutes = totalMinutes + (24*60); hour = totalMinutes / 60; minute = totalMinutes % 60; } } Time sınıfı için yapıcı

Sınıf Yapısı 24 class isim { tanımlar yapıcı tanım(lar)ı yöntem tanımları } özelikler ve sabitler Nesnelerin nasıl oluşturulacağı ve özelliklerinin ilk değerleri Nesnelerin durumlarını nasıl değiştirebileceğimiz

Nesneler 25 saat dakika void dakikaEkle( int m ) Zaman girisZamani Özellikler: saat = 8 dakika = 30 Yöntemler: void dakikaEkle(int m) cikisZamani Özellikler: saat = 17 dakika = 35 Yöntemler: void dakikaEkle(int m) sınıf nesneler

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. 26

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çekleme si 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. 27

Java Örneği 28 class Time { private int hour, minute; public Time (int h, int m) { hour = h; minute = m; } … } Time inToWork = new Time(8, 30); Time outFromWork = new Time(17, 35); Yapıcı fonksiyon özellikler

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

Java Örneği 30 class Time { private int hour, minute; public Time (int h, int m) { hour = h; minute = m; } public void addMinutes (int m) { int totalMinutes = ((60*hour) + minute + m) % (24*60); if (totalMinutes<0) totalMinutes = totalMinutes + (24*60); hour = totalMinutes / 60; minute = totalMinutes % 60; } } fonksiyon

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, Java veya C++ gibi diller 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. 31

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. 32

Sınıf Hiyerarşisi Örneği 33 extends toString( ) equals( Object obj ) getClass( ) Shape Rectangle Time extends Bu sınıftan oluşturulan nesneler hiyerarşik yapıda en üst noktaya kadar olan tüm özellik ve yöntemleri barındırır. Object Circle Triangle extends void addMinutes( int m ) hour minute color borderWidth Color getColor( ) void setBorderWidth( int m ) int computeArea( ) length width int computeArea( ) radius base height int computeArea( )

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. 34

Arayüz Kalıtımı Örneği 35

Özet  Yazılımın kendisi ve geliştirme süreçleri karmaşıktır.  Karmaşıklığın üstesinden gelmenin en iyi yolu soyutlamadır.  Sınıflar,  Soyutlama  Sarmalama  Hiyerarşik veri yapılanması için gerekli desteği sağlarlar. 36