The European Union’s “Making the Labour Market more Inclusive III” programme For “North Cyprus” Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals Module 2:Server Side Internet Programming Modül 2: Sunucu Tarafı Internet Programlaması Laboratuar Notları A project implemented by CyberSoft Bilişim Teknolojileri Ltd. This project is funded by European Union. The contents of this publication are the sole responsibility of Cybersoft Bilişim Teknolojileri Ltd. and can in no way be taken to reflect the views of the European Union. İçerik Bölüm 2: Nesne Kavramı ve Sınıf Nesnelerinin Tasarımı Örnek 1: Sınıf nesnesi yaratma…………………………………………………………………………………….2 Çalışma 1: Account Sınıfında Değişiklik Yapma………………………………………………………………….3 Çalışma 2: GradeBook Sınıfında Değişiklik Yapma………………………………………………………………6 Çalışma 3: Employee Sınıfı Yaratma………………………………………………………………………………8 Çalışma 4: Person Sınıfındaki Hataları Bulma…………………………………………………………………….10 Çalışma 5. Date İsimli Yeni Sınıf Yaratma…………….………………………………………………………….12 1 Örnek 1: Sınıf Nesnesi Yaratma Sınıf nesnesi birden fazla veri tipinin bir arada bulunduğu ve belli bir işi yapmaya yönelik hazırlanan birleşik bir yapıdır. Şimdi temel olarak bir sınıf nesnesinin nasıl yaratıldığına bakalım: public class Kitap { String Book_name; String author_name; int page_number; float price; ... float findPrice() { .... } void changePrice(float new_price) { .... Örnek 1: Sınıf nesnesi yaratma Bu örnekte de görüldüğü gibi bir sınıf nesnesi yaratırken “class” anahtar sözcüğünü kullanmaktayız. Nesnemizin tamamı, class anahtar sözcüğü ile onu takip eden ve bizim vereceğimiz isimden sonra açılan küme parantezi ile en sonda kapatılan küme parantezi içerisine yazılmaktadır. Nesne yaratılırken ilk kullanılan “public” anahtar sözcüğü nesnenin başka nesneler içerisinde de doğrudan kullanılabileceğini belirtmektedir. Bu anahtar sözcük gibi nesnenin doğrudan kullanılamayacağını belirtebileceğiniz “private” anahtar sözcügü de mevcuttur. Bunu dışında yeri geldikçe kullanılabilecek başka anahtar sözcüklerin olduğunu da belirtmeliyim. Gördüğümüz gibi Book isimli sınıf nesnemizin içerisinde “book_name”, “author_name” gibi değiskenler (variable) yer almaktadır. Bu değişkenlere sınıf degişkenleri denilir ve nesnenin özelliklerini meydana getirirler. Bu özellikler her Book nesnesi için değişecektir ancak her Kitap nesnesi, değerleri farklı olsa bile bu özelliklere sahip olacaktır. Ayrıca yine nesnemiz içerisinde bu değişkenlere ek olarak bazı metodların yazılabilecegini de görmekteyiz. Java'da “metod” olarak isimlendirilen kavramlar C ya da C++ programlama dillerindeki “fonksiyon” kavramı ile aynı şeyi anlatmaktadır. Metodlar sayesinde belirli işlerin tek seferde yapılmasını sağlayabiliriz. Mesela bu örnek sınıf nesnesini kullanırken sınıf değiskenleri içerisine sırasıyla book_name, author_name ve price yükledigimizi kabul edelim. Bundan sonra herhangi bir anda kitabın ücretini öğrenmek istediğimizde önce hangi değişkenler olduğunu, hangi değişkende aslında price bilgisinin yer aldığını öğrenmek yerine bu işi bizim için yapıp bize sadece sonucu üretecek bir metod yazmak daha akıllıca olacaktır. Şimdi şu ana kadar edinmiş olduğumuz bilgiler ışığında aşağıda verilen çalışmaları yapalım. 2 Çalışma 1:Account Sınıfında Değişiklik Yapma Aşağıda verilen program şablonu hatasız çalışan bir Java programıdır. Ancak programdaki bir veya birden fazla anahtar satırları açıklama satırlarıyla değiştirilmiştir. Problem tanımını okuyun ve örnek sonucu inceleyin; daha sonra da şablon kod üzerinde çalışın. Problem çözme ipuçları’nı kullanarak /* */ gösterilen açıklama satırlarını Java koduyla değiştirin. Programınızı derleyin ve çalıştırın. Bulduğunuz sonucu örnek sonuçla karşılaştırın. 1.1 Account Çalışmasının Amacı Bu çalışmada şu konular incelenecektir: Metodların yaratılması Metodları çağırma ve metodlardan dönen değerleri alma If komutunu kullanarak bir koşulu test etme Printf komutunu kullanarak değişkenlerin değerini ekrana yazdırma 1.2 Account Çalışmasının Problem Tanımı Aşağıda verilen Account isimli program şablonunda şu değişiklileri yapınız. Account’dan para çekebilmek için kullanılacak olan debit isminde yeni bir metod yazınız. Debit miktari Account’daki balance miktarını aşmamalıdır. Eğer aşarsa, “Debit amount exceeded account balance." mesajı ekrana yazılmalıdır. AccountTest metodunda gerekli değişikliği yaparak debit metodunu test ediniz. 1.3 Account Çalışmasının Örnek Program Çıktısı 3 1.4 Account Çalışmasının Program Şablonu Şekil 1.1 Account.java Şekil 1.2 AccountTest.java (1 of 2) 4 Şekil 1.2 AccountTest.java (2 of 2) 1.5 Account Çalışması için Problem Çözme İpuçları 1. debit adında void tipinde dönüşüm veren bir public metod tanımlayınız. 2. Kullanıcın istediği miktarı girebilmesini sağlayan bir parametre kullanınız. 3. debit metodunun ana kısmında balance’da herhangi bir withdrawal olup olmadığını test etmek için if komutunu kullanınız. Eğer koşul doğruysa, ekrana uygun bir mesaj yazdırınız. 4. withdrawal miktarının balance’daki miktardan küçük veya eşit olup olmadığını test etmek için başka bir if komutu kullanınız. Daha sonra balance miktarını uygun şekilde düşürünüz. 5 Çalışma 2: GradeBook Sınıfında Değişiklik Yapma Aşağıda verilen GradeBook ismindeki program şablonu hatasız çalışan bir Java programıdır. Ancak programdaki bir veya birden fazla anahtar satırları açıklama satırlarıyla değiştirilmiştir. Problem tanımını okuyun ve örnek sonucu inceleyin; daha sonra da şablon kod üzerinde çalışın. Problem çözme ipuçları’nı kullanarak /* */ gösterilen açıklama satırlarını Java koduyla değiştirin. Programınızı derleyin ve çalıştırın. Bulduğunuz sonucu örnek program çıktısıyla karşılaştırın. 2.1 GradeBook Çalışmasının Amacı Bu çalışmanın amacı aşağıda belirtilen Java programlama konseptlerinin öğrenilmesini sağlamaktır. Bu çalışmada şu konular incelenecektir: instance değişkeni tanımlanması instance değişkeninin değerinin değiştirebilmek için set isminde metod yazılması Parametre kullanan metodların tanımlanması 2.2 GradeBook Çalışmasının Problem Tanımı Aşağıda verilen GradeBook program şablonunda şu değişiklileri yapınız. Dersi veren hocanın ismini temsil eden instructor’s name adında ikinci bir string tipinde instance variable tanımlayınız. instructor’s name değiştirebilmek için set isminde bir metod tanımlayınız ve instructor’s name alabilmek için get isminde başka bir metod tanımlayınız. Constructor’de gerekli değişiklikleri yaparak iki parametre almasını sağlayınız. Bu parametrelerden biri course name diğeri ise instructor’s name olmalıdır. displayMessage metodunu değiştirerek welcome mesajı and course name’i ekrana yazdırınız.Daha sonra da “This course is presented by: " şeklinde başlayıp instructor’s name ekrana yazan ikinci bir mesaj tanımlayınız metoda eklenen yenilikleri yapabilmesi için test application’da gerekli değişiklikleri yapınız. 2.3 GradeBook Çalışmasının Örnek Program Çıktısı 6 2.4 GradeBook Çalışmasının Program Şablonu Şekil 2.1 GradeBook.java Şekil 2.2 GradeBookTest.java 7 2.5 GradeBook Çalışması için Problem Çözme İpuçları 1. Gradebook sınıfında dersi veren hocanın ismini temsil eden instructor’s name adında ikinci bir string tipinde instance variable tanımlayınız. 2. instructor’s name için set isminde yeni bir public metod tanımlayınız. Bu metod herhangi bir değeri geri göndermesin ama String tipinde bir parameter alsın. set metodunun ana kısmında alınan parametre instructor’s name’e atansın. 3. instructor’s name almak için get isminde yeni bir public metod tanımlayınız. Bu metod herhangi bir parametre almasın ama String tipinde tanımlanmış olan instructor’s name geri döndürsün. 4. constructor’de gerekli değişiklikleri yaparak String tipinde iki parametre almasını sağlayınız. Bu parametrelerden biri course name diğeri ise instructor’s name olmalıdır. instructor’s name temsil eden parametreyi uygun instance değişkenine (variable) atayınız. 5. displayMessage metoduna daha önceden tanımladığınız instance değişkeninin değerini ekrana yazdırabilmek için System.out.printf komutu ekleyiniz. Çalışma 3. Employee Sınıfı Yaratma 3.1 Employee Çalışmasının Amacı Bu çalışmanın amacı aşağıda belirtilen Java programlama konseptlerinin öğrenilmesini sağlamaktır. Sınıf (class) yaratılması instance değişkenlerinin tanımlanması constructor tanımlanması set ve get metodlarının tanımlanması başka bir class’ın özelliklerini gösterebilen bir test application yazılması 3.2. Employee Çalışmasının Problem Tanımı Aşağıda verilen program şablonunu kullanarak Employee isminde bir class yaratınız. Bu yaratılan class ın özelllikleri şunlar olmalıdır: 1. Bu class üç tane instance değişkeni içermelidir. first name (string) last name (string) monthly salary (double) 2. Bu class’a yukarıdaki üç instance değişkenine ilk değerlerini atayacak bir constructor yazınız. 3. Her instance değişkeni için set ve get metodları yazınız. Eğer monthly salary pozitif değilse, 0.0’a eşitleyiniz. 4. Yarattığınız Employee class’ın özelliklerini gösteren bir test application yazınız. 5. İki tane Employee object yaratınız ve her Employee’nin yearly salary’sini ekrana yazdırınız. 6. Daha sonra her Employee’nin maaşını %10 artırarak yearly salary’sini tekrardan ekrana yazdırınız. 8 3.3 Employee Çalışmasının Örnek Program Çıktısı 3.4 Employee Çalışmasının Program Şablonu Şekil 3.1 Employee.java Şekil 3.2 EmployeeTest.java 9 3.5 Employee Çalışması için Problem Çözme İpuçları 1. Employee sınıfı için üç tane instance değişkeni tanımlayınız. first_name (string) last_name (string) monthly_salary (double) 2. constructor her instance değişkeni için bir parametre istemelidir. Yani constructor toplam üç tane parametre istemelidir. 3. Her instance değişkeni için public set metodları yazınız. set metodları herhangi bir değer geri döndürmesin ve herbirinin ilgili instance değişkenine uygun tipte parametresi olsun. (first name ve last name String tipinde, monthly salary double olsun ) 4. Her instance değişkeni için public get metodları yazınız. get metodları herhangi bir parametre almasın ama ilgili instance değişkenine uygun tipte değer geri döndürsün. 5. constructor test sınıfından çağrıldığı zaman, constructor’ün parametrelerine uygun üç tane argüman (argument) gönderilmelidir. 6. Her employee’ye verilecek artış için current_salary miktarınının get metodu tarafından alınabilmesı için bir call gereklidir.Aynı zamanda new_salary’i tanımlamak için kullanılacak olan set metodu için de bir call gereklidir. 7. monthly_salary dolar cinsindendir. Dolayısıyla salary miktarını ekrana yazdırırken noktadan sonra sadece iki değer yazılabilmesi için %.2f belirleyicisini kullanınız. Çalışma 4. Person Sınıfındaki Hataları Bulma Bu çalışmadaki program kodu hatalar içermektedir. Programın çalışabilmesi için bütün derleme hatalarını düzeltiniz. Program derlendiğinde, programı çalıştırınız ve sonuçları örnek ekran çıktısıyla karşılaştırınız. Daha sonra mantıksal hata varsa düzeltiniz. Program doğru şekilde çalıştığında sonuçlar aşağıdaki örnek program çıktısı gibi olmalıdır. 4.1 Person Çalışmasının Örnek Program Çıktısı 10 4.2 Hatalı Program Kodu Şekil 4.1 Person.java 11 Şekil 4.2 PersonTest.java Çalışma 5. Date İsminde Yeni Bir Sınıf Yaratma Date isminde yeni bir sınıf yaratınız. Bu sınıf üç tane değişken içermelidir: month (int) day (int) year (int) Yarattığınız sınıfın bu üç değişkene ilk değerlerini atamak için kullanılacak bir constructoru olmalıdır. Her değişken için birer set ve get metodu tanımlayınız. month, day ve year bilgilerini slash (/) ile ayrılmış şekilde ekrana yazdırmak için displayDate isminde bir metod tanımlayınız. Aşağıdaki örnek program çıktısını verebilecek DateTest isminde bir test application yazınız. 12