Bölüm 9 Altprogramlar.

Slides:



Advertisements
Benzer bir sunumlar
Nesneye Yönelik Programlama
Advertisements

Fonksiyonlar.
Makine Müh. & Jeoloji Müh.
Bilgisayar Programlama Güz 2011
Zeynep Çelik Sunar….
Programlama-II (Java ile Bilgisayar Programlama)
Bölüm 7 Fonksiyonlar GÖSTERGELER Gösterge Tanımı
Visual Basic 6.0 Ders Notları
9.bölüm Alt Programlar.
Altprogramların Uygulanması
Değişken Bildirimleri
Bölüm 6 – Metodlar ve Parametreler
Dizi (array) değişkenleri
NESNEYE YÖNELİK PROGRAMLAMA
Erişim Denetimi, Fonksiyon
Fonksiyonlar Fonksiyon nedir?
Fonksiyonlar.
Değişkenler veri tipleri operatörler
METODLAR Canan Işıl. 1 İçindekiler Açıklamalar, Örnekler, Sorularınız? Kaynakça, Teşekkürler..
Bilgisayar Programlama
Ses Kontrol Metodlar ile ilgili son birkaç söz Tekrar: Programlama için başlıca 3 model.
Metotlar.
FONKSİYONLAR.
Önceki Dersi Hatırlama !!
Chapter 8: Advanced Method Concepts
Bilgisayar Programlama
Altprogramlar(Subprograms)
JAVA’DA DÖNGÜLER.
Kalıtım , Sınıf Asli Ergün.
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL
FONKSİYONLAR İbrahim Onur Sığırcı.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Sınıflar ve Nesneler Sınıf: bir nesnenin şablonunu, kalıbını, şeklini, davranışını, kalıtımını değişkenleri, metodları ve ebeveynleri vasıtasıyla tanımlar.
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Amaçlar Bu derste öğrenilecekler: –Uygulamaları “method”
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Procedure ve Function PASCAL’da
1 Yapılandırılmamış programlama Prosedür/Fonksiyon gerekliliği Prosedural Programlama Fonksiyon Tanımlama/Prototip/Çağırma Örnek fonksiyonlar Fonksiyon.
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Algoritmalar ve Programlama I Ders 10: ALTPROGRAM KAVRAMI ve FONKSİYON
İsimler ve Bağlanma Names and Bindings
Bölüm 8: Altprogramlar.
Bölüm 5: Adlar, Bağlama, Tip Kontrolü ve Kapsamlar
4. Hafta1 4. HAFTA. 4. Hafta2 Fonksiyonlar  Büyük problemler, küçük parçalara bölünerek kolay çözülür  Yazılımlar benzer modüller içerirler  Hata ayıklama.
Veri yapıları Hafta3 Dizi Yapıları.
Bölüm 9: Alt Programları Uygulamak
Fonksiyonlar.
Programlama Dillerinin Prensipleri
VERİ ve BELLEK & DEĞİŞKENLERİN SAKLANMASI Asst.Prof.Dr.Misket YEKTAY Gizem AYIK.
Bağlama ve Kapsam Kavramları
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
C’de Fonsiyonlar Aslı Ergün.
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
SQL SERVER STORED PROCEDURE
Excel’de VBA Programlama (Visual Basic Application)
Bölüm 6 Veri Tipleri.
İsimler, Bağlamalar, Tip Kontrolü, Etki Alanları
Soyut veri tipleri ve kapsülleme kavramları
Bölüm 7 İfadeler ve atamalar.
Bilgisayar Bilimi Problem Çözme Süreci-2.
Bölüm 6: Kullanıcı Tanımlı Fonksiyonlar I
Altprogramların gerçeklenmesi
Akis diyagramı Örnekleri
Nesneye Dayalı Programlama 1
NİŞANTAŞI ÜNİVERSİTESİ
Bilgisayar Bilimi Fonksiyonlar-2.
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

Bölüm 9 Altprogramlar

9. Bölüm konuları Giriş Altprogram temelleri Yerel atıf ortamları (local referencing environments) Parametre geçme yöntemleri Altprogram olan parametreler Çok anlamlı (overloaded) altprogramlar Jenerik altrpogramlar Kullanıcı-tanımlı çok anlamlı operatörler Korutinler (coroutines) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Giriş İki temel soyutlama Süreç soyutlama (process abstraction) İlk zamanlardan beri var Veri soyutlama (data abstraction) 1980lerden beri var Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Altprogram temelleri Her altprogramın tek giriş noktası var Çağıran program, çağrılan program çalışırken askıya alınır Çağrılanın çalışması bittiğinde, kontrol her zaman onu çağırana geri döner. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Temel tanımlar Altprogram tanımı altprogramın arayüzünü ve yaptığı işleri tanımlar Altprogram çağrılması altprogramın çalısması isteğidir Altprogram başlığı tanımın ilk kısmıdır. Altprogramın adını, ne tür altprogram olduğunu (prosedür/fonksiyon) ve formel parametrelerini içerir Altprogramın parametre profili (imzası) parametrelerin sayısı, sırası ve tiplerinden oluşur Altprogramın protokolü altprogramın profilidir. Altprogram eğer bir fonksiyon ise, o zaman profile fonksiyonun dönüş tipi de dahil olur. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Temel tanımlar… Altprogram deklarasyonu altprogramın protokolünü içerir (gövde yok). C ve C++ dillerinde fonksiyon deklarasyonunun adı: prototip Formel parametre (formal parameter) altprogam başlığında olup gövdede kullanılan bir “kukla” değişkendir (dummy variable) Asıl parametre (actual parameter) altprogram çağrılmasında kullanılan bir değer veya adrestir Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Asıl/formel parametre ilişkilendirmesi Konuma bağlı Birinci asıl birinci formele, ikinci asıl ikinci formele vs. bağlanır Anahtar kelime Asıl parametrenin hangi formel parametreye bağlanacağını çağırma anında belirtiriz. Avantajları: Parametreleri istediğimiz sırada verebiliriz Parametre eşleştirme hataları olmaz Dezavantajı: Formel parametre isimlerinin billinmesi gerekir Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Formel parametre varsayılan değerleri Bazı dillerde (ör: C++, Python, Ruby, Ada, PHP), formel parametrelerin varsayılan değerleri olabilir. C++ dilinde parametreler sıralı olduğundan varsayılan değerler en sona konur Değişen sayıda parametre - C# metodlarının ayni tipte olamaları koşulu ile değişen sayıda parametreleri olabilir Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Prosedürler ve fonksiyonlar İki tür altprogram var Prosedürler : parametresi olabilen komutlar topluluğu Fonksiyonlar prosedür gibi, ancak geri verdikleri değer (return value) var. Prensipte yan etkileri olmamalı Pratikte yan etkileri var Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Lokal atıf ortamları (referencing environments) Lokal değişkenler yığıt-dinamik olabilir - Avantajları Özyinelemeyi destekler Alt programlar yığıt üzerinde ayni yeri kullanabilir Dezavantajları Yer alma-yer bırakma (allocation/de-allocation) , ilkleme zamanı Dolaylı adresleme Altprogramlar tarihçeye duyarlı değil Lokal değişkenler statik olabilir Avantajları ve dezavantajları yığıt-dinamiğin tersi Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Parametre geçmenin semantik modelleri Gir modu (in mode) Çık modu (out mode) Girçık modu (inout mode) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Parametre geçmenin semantik modelleri... Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Değer ile geçiş (Gir modu) (Pass by value) Asıl parametrenin değeri formel parametreyi ilklemek için kullanılır Normalde kopyalama yönemi ile yapılır Fonksiyon gövdesinde formel parametre bir lokal değişken gibi görev yapar Kopyalamanın dezavantajları: Ek hafıza gerektirir Kopyalama zaman alabilir (büyük nesneler için) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Netice ile geçiş (Çık modu) Asıl parametre bir değişken olmalıdır. Altprograma bir değer verilmez. Formel parametre yerel değişken gibi görev yapar. Kontrol çağırana dönmeden hemen önce, formel parametrenin son değeri asıl parametrenin içine kopyalanır. Fazladan deplama ve zaman ihtiyacı Olası sorun: sub(p1, p1); en son hangi formel parametre kopyalanırsa, o değer p1 içindeki değer olur. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Değer-netice ile geçiş (girçık modu) Değer ve netice ile geçişin birleşimi Formel parametrelerin hafızada yeri var Altprogram çağrıldığında asıl parametreyi formel parametreye kopyala Altprogram geri dönerken formel parametreyi asıl parametreye geri kopyala Dezavantajları Iki kere kopyala İki kere sakla Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Referans ile geçiş (girçık modu) Asıl parametrenin adresini geç Formel parametreye yapılan herhangi bir değişiklik anında asıl parametreye yansır Advantage: Verimlilik (kopyalama ve çifte yer ayırma yok) Dezavantajı Ayni yere birden çok şekilde erişim (aliasing) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

İsim ile geçiş (girçık modu) Metinsel yerike koyma Makro gibi Örnek: i 1’den n’e kadar olacak şekilde (xi × i) toplamını bul. Bu işi yapabilecek, Sum(i, 1, n, x[i]*i) diye çağrılabilecek bir altprogam yazalım. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

İsim ile geçiş (girçık modu)... real procedure Sum(j, lo, hi, Ej); value lo, hi; integer j, lo, hi; real Ej; begin real S; S := 0; for j := lo step 1 until hi do S := S + Ej; Sum := S end; Çağırma: Sum(i, 1, n, x[i]*i) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

İsim ile geçiş problemi procedure swap (a, b); integer a, b, temp; begin temp := a; a := b; b:= temp end; swap(i, x[i]) olarak çağrılmanın etkisi: temp := i; i := x[i]; x[i] := temp Doğru çalışmaz! Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Parametre geçme yöntemleri gerçeklenmesi Çoğu dilde sistem çalışma-zamanı yığıtı aracılığı ile Referans ile geçiş en kolay: yığıt üzerine adres koy Referans ve değer-netice yöntemlerinde olası hata: asıl parametrenin değişken yerine bir değer olması Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Bazı ana dillerin parametre geçme yöntemleri C Değer ile geçiş C++ Değer ile geçiş + Reference tipi aracılığı ile referans ile geçiş (ör: int f(int & x){….} ) Java Tüm parametreler değer ile geçilir Nesne parametreler gerçekte nesne işaretçisidirler, onun için işaretçi değer ile geçilir Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Parametrelerin tip kontrolü Güvenirlik için önemli FORTRAN 77 ve orijinal C: yok Pascal, FORTRAN 90, Java, ve Ada: her zaman yapılır ANSI C ve C++: kullanıcı tercihine kalmış Prototipler Yenice dillerde (Perl, JavaScript, PHP) yok Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Altporgram ismi olan parametreler: referans ortamı Sığ bağlama: Parametre olarak geçilen altprogramın çağrıldığı yerdeki ortam - Dinamik etki alanlı diller için uygun Derin bağlama: Parametre olarak geçilen altprogramın tanımladığı yerdeki ortam - Statik etki alanlı diller için uygun Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Altporgram ismi olan parametreler: referans ortamı… Özel amaçlı (ad hoc) bağlama: Parametre olarak geçilen altprogramın parametre olarak geçildiği yerdeki ortam Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Çok amaçlı (overloaded) altprogram Ayni referans ortamında ayni isimde birden çok altprogram Her versiyonun protrokolü farklı olmalı C++, Java, C#, ve Ada dillerinde önceden tanımlı çok amaçlı altprogramlar var Ada dilinde, fonksiyonların geri dönüş tipleri fornkiyonları ayırt etmek için kullanılabilirler, böylece iki çok amaçlı fonksiyonun parametre tipleri ayni olabilir. Ada, Java, C++, ve C# kullanıcı-tanımlı çok amaçlı altprogramlara izin verirler. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Jenerik altprogramlar Jenerik (polimorfik) altrpogramlar her çağrıldıklarında değişik tipte parametreler alabilirler Çok amaçlı (overloaded) altprogramlar ihtiyaca göre polimorfizm sağlarlar (ad hoc polymorphism) Bir altprogramda altprogramın parametrelerinin tipini tanımlayan tip ifadelerinde kullanılan ve yine altrpograma parametre olarak verilen bir tip değişkeni varsa, buna parametrik polimorfizm denir. - Dinamik tip bağlamanın derleme zamanı versiyonu Ada dilinde, jenerik altprogramların tipleri açık olarak belirtilir C++ dilinde kullanıldığı ortmabdan tipler belli olur Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Jenerik altprogramlar... Java 5.0 Jenerik parametreler sınıf olmalı Jenerik paramtrele olarak geçilebilecek sınıflar üzerine sınırlamalar konulabilir Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Parametrik polimorfizm örneği: C++ template <class Type> Type max(Type first, Type second) { return first > second ? first : second; } Yukarıdaki kalıp, > operatörünün tanımlı olduğu her tip için geçerlidir. Örneğin, aşağıdaki tanım otomatik olarak yapılır. int max (int first, int second) { return first > second? first : second; Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Fonksiyonlar için tasarım problemleri Yan etkilere izin var mı? Yan etkileri azaltmak için, parametreler herzaman gir modunda almalı (Ada’daki gibi) Hangi tip geri dönüş tipine izin var? Birçok komutlu dil geri dönüş tipini sınırlar C dili, dizi ve fonksiyon haricindekilere izin verir C++ C gibidir, ama kullanıcı-tanımlı tiplere de izin verir Ada altprogramları, her türlü tipi döndürebilir (altprogramlar tip değildir, dolayısı ile döndürülemezler) Java ve C# methodları her türlü tipi döndürebilir (metodlar tip değildir, dolayısı ile döndürülemezler) Python ve Ruby’de metodlar birinci sınıf varlıklar olduklarından, döndürülebilirler Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Kullanıcı-tanımlı çok amaçlı operatötler Ada, C++, Python, ve Ruby dillerinde operatörler çok amaçlı (overloaded) olacak şekilde “yüklenebilirler”. Ada örneği function "*" (A,B: in Vec_Type): return Integer is Sum: Integer := 0; begin for Index in A'range loop Sum := Sum + A(Index) * B(Index) end loop return sum; end "*"; … c = a * b; -- a, b, c Vec_Type tipinde Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Korutinler Çok giriş noktası olan ve bu giriş noktalarını kendi kontrol eden altprogram Ayni zamanda simetrik kontrol olarak bilinir. Çağıran ve çağrılan oldukça eşit Korutin çağrılmasına tekrar-başla (resume) denir İlk tekrar-başla korutinin başından onu başlatır. Daha sonrakiler kaldığı yerden devam ettirir. Korutinle birbirlerini tekrar-başlatırlar (sonsuza kadar da olabilir) Koruntinler program ünitelerinin yalancı-paralel (quasi-concurrent ) şekilde çağrılmalarını sağlar. Çalışmaları dönüşümlüdür ama örtüşmez. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Korutin görseli: olası çalışma kontrolü Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Korutin görseli: olası çalışma kontrolü Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Korutin görseli: olası çalışma kontrolü (döngülü) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Özet Altprogram tanımı, altprogram tarafından temsil edilen faaliyetleri anlatır Altprogramlar fonksiyon veya prosedür olabilir. Lokal değişkenler yığıt-dinamik veya statik olabilir Parametre geçmenin üç kipi (mode): gir, çık, girçık Bazı dillerde oparatörler çok amaçlı olabilir (overloaded) Altprogramlar jenerik olabilir Korutin, çok giriş noktası olabilen bir altprogram türüdür. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ