22.03.2011 Programlamaya Giriş Nesne Tabanlı Programlamaya Giriş ve FONKSİYONLAR Sunum İçeriği Nesne Tabanlı Programlama Kavramı Fonksiyon tanımlama ve kullanma Formal Parametre nedir? Gerçel Parametre nedir? Fonksiyon çağırma nedir? Neden Fonksiyon tanımlarız? Java’ da Fonksiyon Örnekleri Sorular? 1 22.03.2011 Nesne Tabanlı Programlamaya Giriş Sınıflar ve nesneler Java programlamanın temelini oluştururlar. Java ile geliştirilmiş bütün uygulamalarda sınıf ve nesne kavramını kullanmak zorunluluğu vardır. Örneğin C++ dilinde böyle bir zorunluluk yoktur. Bu dilde sınıf ve nesneler olmadan da program geliştirmek mümkündür. Java da ise mümkün değildir. Bu sebeple Java için pure(saf) nesne tabanlı programlama dilidir denilir. Nesne Tabanlı Programlama (OOP) kavramında ilk bilinmesi gereken şey sınıf(class)kavramıdır. Sınıflar, içerisinde değişken/değişken grupları , metot/metotlar barındıran bir şablon oluştururlar. Bir sınıf oluşturulduktan sonra bu sınıfı yeni bir veri tipiymiş gibi kullanabiliriz. Bu amaçla kullanılan yapılara ise nesne denir. Nesneler, yaratıldıkları sınıfların özelliklerini taşırlar ve artık ilgili sınıfın birer somut örneğidir diyebiliriz. Örneğin şehir kelimesini bir sınıf olarak düşünürsek Elazığ, Ankara ve İstanbul şehir sınıfının birer örneği olarak düşünülebilir. Sınıflar Sınıflar java programlamada kullanılan temel programlama elemanlarıdır. Bütün kod içeriği sınıflar içerisinde bulunur. Asıl kullanım amacı, verileri tek tek değişkenlerde tutmak yerine, birbirleriyle ilişkisi olan verileri bir araya getirmek ve bunlara tek bir referans aracılığıyla erişmeyi sağlamaktır. Örneğin öğrenci bilgisini tutabilmek için ad, soyad, öğrenci numarası, yaş ve adres gibi bilgilere ihtiyacımız olduğunu düşünelim. Bunların hepsini her bir öğrenci için ayrı ayrı değişkenlerde tutmak yerine öğrenci isimli bir sınıf oluşturabilir ve ihtiyacımız olan değişkenleri bu sınıf içinde gruplayabiliriz. Daha sonra sınıfımızdan oluşturacağımız her yeni nesne sınıfımızın özelliklerini taşıyacağı için yükten kurtulmuş olunur diyebiliriz. 2 22.03.2011 Nesneler Bir sınıfı tanımladıktan sonra aslında yeni bir veri tipi oluşturmuş oluruz. Java dilinde oluşturduğumuz bu yeni veri tipine sahip değişkenlere nesne adı verilir. Nesneler oluşturulan sınıfların birer somut örneği, hafızada yer alan, ilgili sınıfın tipinde birer somut değişkendir diyebiliriz. Şimdiye kadarki uygulamalarımızda kullanmış olsak ta burada bir kez daha bir sınıfta nelerin bulunabileceğine değinelim. Bir sınıf, üye değişkenler, yapılandırıcı metotlar, üye değişkenlere dışarıdan erişim sağlayan getter/setter metotlar ve çeşitli metotlar içerebilir. Şimdi kısaca bunların ne anlama geldiğini görelim. Bir sınıfın üyeleri Üye değişkenler: Sınıfta tutulacak bilginin depolandığı özel değişkenlerdir. Sınıfımızın değişkenlerinin ne olacağı uygulamamızın tipine göre şekillenecek bir şeydir ve programlama mantığımızla alakalı bir durumdur. Nesne tabanlı programlamada amaç bir anlamda gerçek hayatın programlama dili ile kodlanabilmesidir. Sınıf üye değişkenlerin ne olacağı problemimizin doğasına bağlıdır. Yapılandırıcı metotlar: Sınıf ilk oluşturulurken new operatoru ile çağrılan metotlar. Üye değişkenlere dışarıdan erişim sağlayan metotlar: genelde public kelimesi ile tanımlanırlar ve üye değişkenlere dışarıdan erişimi sağlarlar Diğer metotlar: sınıf içerisindeki verileri kullanarak genellikle sınıf ile ilgili çeşitli çıktılar üreten metotlardır. Şimdi bu yapıları ve bu yapılar oluşturulurken kullanılan temel java ifadelerini kısaca görelim 3 22.03.2011 Bir sınıf örneği public class Ogrenci{ private String ad; private String soyad; private int ogrenciNo; private String bolum; public Ogrenci(){ // ? Fonksiyon! ad=‘’ ’’; soyad=‘’ ’’; ogrenciNo=-1; bolum=‘’ ’’; } public void setAd(String ad){ this.ad=ad; } public void setSoyad(String soyad){ this.soyad=soyad; } } Anahtar kelimeler Public, private ve protected ;üye değişkenler ve sınıf metotları için erişim seviyeleri tanımlamak için kullandığımız anahtar kelimelerdir. Bunlar sınıf içerisinde bulunan değişkenlere nasıl erişim sağlanacağını belirlemek için kullanılır. public: bu anahtar kelime önüne geldiği değişkenin veya metotların bütün sınıflardan erişilebilir olmasını sağlar. Private: önüne getirildiği değişken veya metodun dışarıdaki sınıflardan erişilmez olmasını sağlar. Private değişkenler sadece kendi sınıfı içerisinde kullanılabilir . Protected: önüne getirildiği değişken veya metotlara sadece kendi paketi içerisindeki sınıflar tarafından erişim izni verir. 4 22.03.2011 Anahtar kelimeler ve erişim izinleri Aşağıdaki şekil erişim seviyelerini anlamamız açısından güzel bir örnektir. Yeşil renk kullanım izninin olduğunu , kırmızı renk ise kullanım izninin olmadığını göstermektedir new operatörü Bu operatör bir sınıf adıyla birlikte kullanılır. Bellekte ilgili sınıfa ait bir nesne oluşturur. Bir örnek olarak; Ogrenci o1=new Ogrenci(); İfadesi ile o1 nesnesi için Ogrenci sınıfına özel bir bellek ayrılmasını sağlar. Çok defa örneklerde kullandığımız new operatörü javada sıklıkla kullandığımız bir ifadedir. Temel tip değişken tanımlamalarımızda veya kendi sınıfımızın bir nesnesini yaratacağımız zaman kullandığımız bir kelimedir. Aşağıda bir başka örnek olarak oku ismiyle Scanner sınıfının bir örnek nesnesi yaratılmaktadır. Scanner oku= new Scanner(System.in); 5 22.03.2011 Nokta(.) operatörü Nesneler tanımlandıktan sonra ve new operatörü aracılığı ile oluşturulduktan sonra nesnelerin public ve protected anahtar kelimeleri kullanılarak tanımlanmış üye değişken veya metotlarına dışarıdan erişim sağlayabilmek için java nokta operatörünü kullanır. Örnek olarak; Yukarıda tanımladığımız Ogrenci sınıfının bir nesnesini yaratarak üye değişkenlere erişim sağlayalım; //… Ogrenci yeniogrenci=new Ogrenci(); yeniogrenci.setAd(‘’Abdullah’’); yeniogrenci.setSoyad(‘’Çelik’’); //… Buraya kadar ,sınıf tanımı, yapılandırıcı tanımı , üye değişken tanımları, sınıftan nesne üretimi, ve nokta operatörü ile nesnelerin değişkenlerine erişimleri görmüş olduk. Bu kısımda artık metotlara detaylı olarak girebiliriz. 6 22.03.2011 Metotlar Genel olarak metotlar, parametre olarak dışarıdan verilen veriler üzerinde çeşitli işlemler gerçekleştiren isteğe bağlı olarak yapılan bu işlemlerin sonucunu geri döndüren programlama ifadeleridir. Java dilindeki metotlar, C/C++,C# dillerinde fonksiyon, bazı dillerde procedure ve module olarak isimlendirilir. Özetle ,metotlar, hemen hemen tüm programlama dillerinde kullanılan ve belirli işlevleri yerine getirmek için kullanılan yapılardır. Metotlar değer döndürmek zorunda değillerdir. Metotlar parametre alabilir veya almayabilirler. Metotlar Javada metot tanımı şöyledir: Özel_anahtar_kelime Dönüş_tipi Metot_Adı(Metot_parametreleri) { Metot işlevleri; // işlemler bu kısımda yapılacaktır } 7 22.03.2011 Metotlar Özel Anahtar Kelimeler: Bu alan dolu olmak zorunda değildir. Bu alan metoda erişim seviyesini belirleyen public, private, protected anahtar kelimelerini veya metotun statik metot olup olmadığını belirleyen static kelimelerini içerebilir. Dönüş Tipi: Genellikle Metotlar bir sonuç döndürürler. Sonuç döndürme işlemi return kelimesi ile yapılır. Eğer metot bir değer döndürmeyecekse ,geri dönüş tipi kısmında void kelimesi bulunmalıdır. Metot Adı: Metotlara ana program içerisinden erişimlerde metodun adı kullanılır. Metot Parametreleri: Bu alan metodun yapacağı işlemler için sağlanacak parametreleri belirler. Parametreler parantez içine yazılır ve her bir parametre diğerinden virgülle ayrılır. Metot içeriği: Metodun yapacağı işlemler burada tanımlanır. Metotlar private int topla(int sayi1,int sayi2){ int sonuc ; sonuc = sayi1+sayi2; return sonuc; } int sayi1 int sayi2 int sonuc; sonuc=sayi1+sayi2; return sonuc; sonuc topla metodu 8 22.03.2011 Metotlar Görüldüğü gibi topla metodu int tipinde sayi1 ve sayi2 isminde iki parametre alan ve bu iki değerin toplamını döndüren bir metottur. Toplam int tipinde istendiğinden metodun geri dönüş tipi de int tipindedir. Erişim seviyesi ise private’dir. Yani sadece içinde bulunduğu sınıf tarafından erişime açıktır. Metotlar Uygulamalar; aşağıdaki işlemleri gerçekleştirecek metotlar oluşturunuz. Faktöriyel metodu, Dört işlem gerçekleştirmek üzere tüm metotları içeren bir java programı 9 22.03.2011 Metotların kullanımı Metotlar bir defa tanımlandıktan sonra normal java komutları gibi kullanabiliriz. Örneğin yukarıda tanımladığımız topla metodunu kullanmak için; //… int a=50; int b=20; int toplam=topla(a,b); //topla metodu kullanımı System.out.println(toplam); //... Metotlar Metotlar bir kez tanımlanırlar ve main metot içerisinde istenildiği kadar çağrılıp kullanılabilir. Önemli olan metodun geri dönüş tipine ve alacağı parametrelerle bizim kullanım şeklimizin uyumlu olmasıdır. Metot tanımında yer alan parametreler hafızada yer kaplamazlar, bu parametreler formal(biçimsel)’dır. Gerçek program içerisinde metot çağrımında (metot kullanımında)kullandığımız parametreler ise gerçek parametrelerdir ve bunlar hafızada yer kaplarlar. 10 22.03.2011 Uygulamalar Faktöriyel işlemi ve dört işlem için oluşturduğunuz metotları main metot içinde kullandığınız uygulamalara dönüştürünüz. Yani; Klavyeden girilen değeri parametre alıp faktöriyel hesabı yapan faktöriyel metodunu kullanan bir java programı yazınız. Benzer şekilde dört işlemi yapan ve yukarıdaki metotlarınızdan oluşan java programı oluşturunuz. Paketler Çok sayıda sınıftan oluşmuş java uygulamalarında benzer sınıfları gruplamak için geliştirilmiş bir çözümdür. Paketlerin getirdiği bir başka fayda derleyici için sınıfların tek başına bir anlam ifade etmemesidir ve sınıfın bulunduğu paketin de göz önünde bulundurulmasıdır. Aynı paket içerisinde aynı isimli iki sınıf olamaz ; farklı paketlerde aynı isimli iki sınıf olabilir. 11 22.03.2011 İstisna Yönetimi Bazen yazdığımız programlar istediğimiz gibi çalışmayabilirler. Örneğin kullanıcıdan sayıların girilmesine yönelik bir programda kullanıcının sürekli olarak doğru tipte değer gireceğinden emin olmak zordur. Bu sebeple kullanıcının yanlış giriş yapması durumunu da göz önünde bulundurmak gerekir. Bu durumda ya girişin doğruluğunu kontrol edecek bir metot yazılmalı ya da oluşabilecek istisnalar trycatch bloğu kullanılarak yakalanmalıdır. Try-catch try { //istisna denetimi yapılacak kod } catch (yakalanacakistisnasinifi yis) { //istisna yakalandığında yapılacak } işler 12 22.03.2011 Try-catch örnek try { girilenSayi = Integer.parseInt(girdi); } catch (NumberFormatException ex) { System.out.println("Bir sayı girmek zorundasınız!!!"); return -1; } return girilenSayi; } try-catch Try-catch bloğunun catch kısmında ,try bloğundaki kod kümesinde üretilebilecek olan istisnalar yakalanmaya çalışılır. Eğer istisna yakalanırsa kullanıcıyı doğru bir sayı girmesi için yönlendirebiliriz. Yukarıdaki program parçasında kullanıcıdan alınan sayı üzerinde bir hata denetimi yapılıyor , burada amaç kullanıcı sayı girmezse hata kodu döndürmektir. 13