Download as pdf or txt
Download as pdf or txt
You are on page 1of 48

Nesne Yönelimli Programlama I

3. Ders
Java ile Programlamaya Giriş

Dr. Öğr. Üyesi Aysun ALTIKARDEŞ

14.11.2021
AMAÇ

 Editörle Java programı yazılması, CMD (Command Prompt)


ortamında derlenmesi ve çalıştırılması
 IDE ortamında çalıştırılması
 IDE’nin sağladığı faydanın anlaşılması
 Java programının anatomisinin

üzerinde önemle durularak, temel programlama bilgilerinin


kazandırılması amaçlanmıştır.

Bu dökümanda yer alan slaytlarda kullanılan kaynak:


14.11.2021 © 2004 Pearson Addison-Wesley. All rights reserved.
Editörle Java programı yazılması, CMD (Command
Prompt) ortamında derlenmesi ve çalıştırılması

• Notepad gibi bir editör programı açılır.


• Aşağıdaki program yazılır ve Merhaba.java uzantılı olarak Desktop’a kaydedilir.
public class Merhaba{
public static void main(String[] args){
System.out.println("Merhaba Java!");
}
}
• cmd ortamında Java klasörü içinde jdk dizini altındaki bin klasörüne geçilir.
Not: cd (change directory –dizin değiştirme komutu)
cd.. Bir üst dizine geçer.
cd\ Ana dizine geçer.
• javac path\Merhaba.java ile derlenir.
• class dosyasının oluştuğu dizine geçilir.
• java Merhaba yapılarak Merhaba nesnesi çalıştırılır ve cmd
ortamında Merhaba Java! çıktısı alınır.
14.11.2021
Editörle Java programı yazılması, CMD (Command
Prompt) ortamında derlenmesi ve çalıştırılması

14.11.2021
Editörle Java programı yazılması, CMD (Command
Prompt) ortamında derlenmesi ve çalıştırılması

14.11.2021
IDE ortamında Merhaba.java

14.11.2021
IDE ortamında Merhaba.java

14.11.2021
IDE ortamında Merhaba.java

14.11.2021
IDE ortamında Merhaba.java

14.11.2021
IDE ortamında Merhaba.java

Merhaba yazılır.

Programın main metodu


komutunu otomatik
oluşturması için checkbox
tik atılır.
Finish aktifleşir ve tıklanır.

14.11.2021
IDE ortamında Merhaba.java

14.11.2021
IDE ortamında Merhaba.java

RUN
yapılır.

14.11.2021
IDE ortamında Merhaba.java

Konsol’da çıktı gözlenir.


14.11.2021
BİR JAVA SINIFININ ANATOMİSİ

Package

Import(s)

Comments(açıklamalar)

Declaration(bildirim)

Fields(alanlar)

Constructors(yapıcılar)

Methods(metotlar)
14.11.2021
BİR JAVA DOSYASI

1. Opsiyonel olarak package ifadesi (dosyanın hangi paketin altına eklenmesi


istendiğini belirten ifade),

2. Gerekli sınıfların eklenmesi için kullanılan import satırları,

3. Daha sonra sınıf ismi gelir,

4. Sınıf ismini takiben kalıtım (inheritance ) ve arayüz (interface) ifadeleri


gelir,

5. Eğer kaynak kod içerisinde birden fazla sınıf (class) veya arayüz (interface)
tanımlanmışsa sadece bir tanesi public olarak tanımlanabilir. Buna ek olarak,
kaynak kod dosyasının ismi public olarak tanımlanan sınıf ismi ile aynı olmak
zorundadır.
14.11.2021
PAKET (PACKAGE) KAVRAMI

Java dilinde modülerliği sağlayan en önemli kavramlardan biri paket

kavramıdır.

Birbiriyle işlev veya kullanım açısından ilişkili sınıflar (class) paket

(package) adı verilen bir birim altında birleştirilir.

Bir sınıfın (class) ait olduğu paketi belirtmek için

java.paketin_adı.sınıfın_adı anahtar kelimesi kullanılır.

Örnek: java.util.Scanner
14.11.2021
Package

• Bir class‘ın ait olduğu package'i belirtmek için 'package'


keyword‘ü kullanılır.

package mypackage;
public class MyClass
// ..
}

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 17


IMPORT KAVRAMI

Bir sınıfın, kendisiyle aynı pakette olmayan başka bir sınıfı


kullanabilmesi için, sınıf (class) tanımından önce import edilmesi
gerekir.

Bu sadece kullanılan sınıfların tam olarak hangi pakette olduğunu


söylemek anlamına gelir. import kelimesi, kaynak kod o paketi
kullanmadan önce yazılmalıdır.

import java.paket_adı.sınıf_adı; şeklinde kullanılır.

Örnek: import javax.swing.JApplet;


Package

• Bir class‘ın diğer bir class'la aynı package'te olması, ona bazı
avantajlar sağlar.
• Aslında bütün class'lar bir package'e ait olmak
zorundadır. Hiç bir isim verilmediğinde o class isimsiz
default package'de kabul edilir. Package'i belirtilmemiş
bütün classlar aynı package'in class'ları sayılır. Bazı
durumlarda sadece örnek olsun diye yapılıp hatalı
(derlenemez durumda) bırakılan class, yine package'siz
olan başka bir class‘ın derlenmesini engelleyebilir.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 19


Import

package myanotherpackage;

import mypackage.MyClass;

public class MyAnotherClass


// ..
}

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 20


* Operatörü ile Import

• Bir package'deki bütün class'ları import etmek için ‘*’


operatörü kullanılabilir.
package myanotherpackage;

import mypackage.*;

public class MyAnotherClass


// ..
}
• Bu işlem, alt alta çok sayıda import ifadesi yazmaktan daha
kolaydır.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 21


'*' operatör

• '*' operatör¸ kullanıldığında bir çok class‘ın gereksiz yere


import edildiği gibi bir izlenim doğmakla birlikte, import
işlemi aslında bir belirtmeden öteye gerçek bir 'içine alma -
include' işlemi anlamına gelmediği için önemli bir
performans kaybına yol açmaz. Sadece bazı programcılar
okunurluğu arttırmak için böyle bir yola gitmektedirler.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 22


IMPORT KAVRAMI

Java aynı dizin içindeki sınıfları, bir paketin içindeymiş gibi görür.
import deyimi ile birlikte * joker karakteri kullanılabilir.

Örnek : import java.util.*;

Anlamı : “java.util paketindeki tüm sınıfları çağır”

Not: * joker karakterini ilgili bir paket için kullanabilirsiniz fakat java.*
şeklinde Java’nın altındaki tüm paketlere erişemezsiniz.
‘java.lang’ Package

• 'java.lang' package'indeki class'ları kullanmak için import


ifadesine gerek yoktur. Bu package olmadan hiç bir Java
programı yapılamayacağı için, default olarak import edilmiş
sayılır.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 24


Örnek

package fatih.edu.ceng217;
import java.util.*;
import fatih.edu.ceng217.lecturenotes.*;
import netscape.javascript.JSObject;
import netscape.javascript.JSException;

public class SplayTree implements TreeType,


TreeConstants
{ ...

}// SplayTree

Paket ismi global olarak tek olmak zorundadır. Yani, aynı isimde başka bir
paket olamaz. Eğer herhangi bir paket ismi belirtilmezse, kaynak dosyamız
içinde bulunulan dizin içerisinde isimsiz ve yazılım geliştirme ortamı
tarafından varsayılan olarak belirlenmiş bir paketin altına kaydedilir.
14.11.2021
Package İsimlendirme

Naming Convention (isimlendirme Geleneği)


Package isimlerinin rastgele verilmesi, bir sistemde farklı kurumlara ait
package'leri bulunması durumunda 'name collision' (isim çarpışması) adı
verilen bir sorun yaratabilmektedir. Aynı package ismini başka bir kurum da
kullandıysa ne olacak? Örneğin siz package'in adını 'myapplets' koydunuz.
Sistemde aynı isimde başka bir kuruma ait bir package daha var tesadüfen.
Java önce hanginizinkini bulursa onu yükler. Sizinki önce bulunuyorsa
onların package'i doğru çalışmaz, onlarınki önceyse sizinki. Bu sorunlarla
karşılaşmamak için package isimlerinde standart bir yöntem uygulanır. Bir
kurum, sahip olduğu internet domain ismini tersten yazarak package
isimlerinin önüne ekler. Örneğin 'godoro.com'a sahip olan kurum veya
kişiler, chat appletlerini 'com.godoro.chat' diye bir package'e koyabilirler.
ChatApplet isimli biri class için fully- qualified class name
'com.godoro.chat.ChatApplet' şeklinde olur. Java'yı ortaya çıkaran
'Sun' firması da kendi package'lerini 'com.sun.' Şeklinde başlatmaktadır.
Özel kuruluşlar com., ticari olmayan kurumlar da org. ile başlarlar.
Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 26
Alt Package'ler

Alt Package'ler
• Bazı durumlarda çok fazla class içermemesi için bir package
alt birimlere bölünebilir. Örneğin, görsel bileşenler içeren
'java.awt' package‘ın image'larla ilşkili olan 'java.awt.image'
şeklinde bir alt package'i bulunmaktadır. Aslında alt
package'in teknik anlamda üst package'in 'içinde' olması
sözkonusu değildir. Alt package isimlendirmesi iki 'ayrı'
package'i sadece anlamca ilişkilendirmektedir.
• Bir class'ta üst package'i import etmek, otomatikman alt
package'lerin de import edileceği anlamına gelmez.
Örneğin, 'java.awt.*' ifadesi 'java.awt.event.*' ifadesini
içermez. Bu alt package'den herhangi bir class
kullanılacaksa ayrıca import edilmesi gerekir.
Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 27
Standart Package'ler

Standart Package'ler
• Java'nın kendi API‘ı (Application Programming Interface -
Uygulama Programlama Arayüz‘ü) bir çok class'dan oluştuğu için
bir çok package altında gruplandırılmıştır. Bunların çoğu 'java.' ve
'javax.' la başlar. 'javax' öneki daha çok, sonradan extension
(ekleme) package'ler için kullanılır. Önceden 'extension' olan
package'ler daha sonra standart API'a dahil olabilmektedir.
• Java'nın standart package'leri benzer ve ilişkili class'lardan oluşur.
Her package'de bulunan class'ların ezberlenmesine gerek yoktur.
Sadece her package'de ne tür class'ların bulunduğu öğrenilmesi
yeterlidir. Örneğin, arayüzle ilgili class'lar 'java.awt'dedir. Görsel
bir bileşen olarak Button bu package'tedir. Yine görsel bir bileşen
olan text alanı’nın (TextArea'nın) da bu package'de olması˝ gayet
doğaldır.
Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 28
Standart Package'ler

14.11.2021
PROGRAMA AÇIKLAMA EKLEME

Bir kaynak programın yıllar sonra programcısı değişmiş olsa bile, program
üzerinde güncelleme yapılmasını kolaylaştıran ayrıntıların tanımlandığı,
satıriçi belgelere Açıklama denir.
Programın çalışmasına herhangi bir etkisi bulunmamaktadır.

14.11.2021
PROGRAMA AÇIKLAMA EKLEME

Java programına açıklama eklemenin üç yolu:

// Satır sonuna kadar yazılanları derleyici işlemez

/* Çoklu satır açıklamaları için kullanılan bu


işaretlerin arasındakiler derleyici tarafından
işlenmez */

/**
* Bu sentaks biçimi Javadoc açıklamaları için
* kullanılır,
* HTML biçimlendirme özelliklerini sunar.
*/
14.11.2021
Nesne Üyelerine Erişim Belirteçleri

Bir sınıf veya nesnenin üyelerine erişim için dört etiket kullanılır.

Public (Açık): Public üyelere programdaki herhangi bir fonksiyon


tarafından erişilebilir. Dolayısıyla public üye veya alanlara farklı paket ve
sınıflardan erişilebilir.
Private (Özel): Bir sınıfın içinde tanımlanan private üyeye sadece o
sınıfın içinden erişilebilir. Dolayısıyla private üye veya alanlara, aynı veya
farklı paketten, farklı sınıflardan erişilemez.
Protected (Korumalı): Protected tanımlanmış bir üyeye aynı paket ve
sınıf içerisinden erişilebilir fakat paket dışarısından yalnız kalıtım ile
oluşturulmuş alt sınıflar erişilebilir.
Default: Bu üç belirteçten (public, private, protected) hiçbiri
kullanılmamışsa default olarak tanımlanmış demektir. Default üyelere
sadece tanımlandığı paket içerisinden erişilebilir.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 32


Nesne Üyelerine Erişim Belirteçleri

Erişebilme Public Protected Default Private

Aynı sınıf(class) içerisinden Evet Evet Evet Evet

Aynı paket içersindeki alt-sınıftan Evet Evet Evet Hayır


(sub-class)
Aynı paket içerisindeki sınıftan Evet Evet Evet Hayır

Farklı paket içerisindeki alt- Evet Evet Hayır Hayır


sınıftan (sub-class) (Türemeyle)

Farklı paket içerisindeki farklı Evet Hayır Hayır Hayır


sınıftan

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 33


Package'ler ve Derleme Birimleri

Aynı Package'teki Class'lar


Aynı package'deki class'lar birbirlerinin private olmayan property ve
methodlarına, onlar public olmasala bile ulaşırlar. Ayrıca, aynı package'deki
class'ların birbirlerini 'import' etmeleri gerekmez.
Derleme Birimi
Class'lar '.java' uzantılı dosyalarda bulunabilirler. Bu dosya aslında bir
compilation unit (derleme birimi) dir . Bir dosyada birden fazla class alt
alta tanımlanabilir. Ancak en fazla bir tanesi 'public' olabilir. Ve dosyanın
(derleme biriminin) adı bu public class‘ın adıyla aynı olmalıdır. Bu class
derleme biriminin asıl class‘ıdır ve adı değiştirildiğinde dosyanın da adı
değiştirilmelidir. Tek dosyada bulunan class'lar derlendiğinde her biri için
ayrı .class üretilir. Yani derlendikten sonra class'lar birbirinden ayrılırlar. Bir
derleme biriminde sadece bir tane class bulundurmak, zorunlu olmasa da
bir gelenek halini almıştır.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 34


Sınıf Yapısı

o Constructor (kurucu metot): Nesne ilk defa oluşturulurken


hangi sınıf değişkenlerinin hangi değerleri alacağını belirten
metot.

o Method (metot): Sınıfların içindeki işlevsel program


parçacıkları.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 35


Sınıf (class) Nedir?

o Sınıflar (Class) nesneleri tanımlamak ve bu nesneler


üzerinde çalışacak metotları sağlamak için kullanılırlar.
o Bütün sınıflar aynı yapıya sahiptirler. Aralarındaki farkı
yaratan şey, içerdikleri değişkenler ve metotlardır.
o Sınflar metotları oluşturur. Bir sınıftaki değişkenler o
sınıfın niteliklerini, metotlar ise o sınıfın davranışlarını
belirler.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 36


Sınıf Yapısı

Sınıf Adı: Otomobil Birinci Nesne:


Veriler: Nesne adı: mustafaninArabası
Yakıt miktarı ________ Yakıt miktarı: 10 litre
hız ________ hızı: 55 km/saat
Plaka no ________ Plaka no: “23 ZZ 4321”
Metodlar (yapılacak işler):
hızıArttır: İkinci Nesne:
Nasıl: Gaz pedalına bas. Nesne adı: yusufunArabası
dur: Yakıt miktarı: 15 litre
Nasıl: Fren pedalına bas. hızı: 85 km/saat
Plaka no: “06 AB 1234”

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 37


Sınıf Yapısı

o Java’da sınıf (class) yapısı için sözdizimi şöyledir:


class herhangi_bir_isim{// Burada Sınıflara ait değişken
tanımlayabiliriz..
degisken_türü degisken_ismi;
degisken_türü degisken_ismi;

// Burada Sınıflara ait metotları tanımlayabiliriz..


degisken türü metodunadi(metoda girilecek degiskenler)
{
// metod içinde yapılcak işlemler
return dondurelecek_degisken;
}
}
Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 38
Sınıf Yapısı

• Sınıf (Class) tanımlarken istersek değişken veya metot


kullanmayabiliriz. Eğer kullanırsak bir sınıfa ait ve ya bir sınıf
üyelerinin metodları şeklinde ifade edilebilir.

Basit bir sınıf kullanımı örneği verirsek;

class Nesne {

public int a;
public int b;
public String adi = new String("nesne");

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 39


Main Metodu

Yazdığımız programlarda birbirinden farklı görevleri


üstlenmiş birçok sınıfı barındıran java dosyaları ve hepsini en
son olarak tek çatı altında toplayacak ve asıl programın
çalışmasını sağlayacak genel bir sınıfımız olacaktır. Ve tüm bu
sınıflar içerisinde sadece ana programı çalıştıracak olan bu
genel sınıf içerisinde "main" metodu olmalıdır. Diğer sınıfları
kullanabilmeniz için, genel sınıf da dahil olmak üzere hepsini
java ile derlemelisiniz. Ancak programı çalıştırmak için sadece
genel sınıfı java komutu ile çalıştırmanız yeterlidir.
Sonuç olarak; bir sınıf java ile çalıştırıldığı zaman,
otomatik olarak içerisindeki main metodu çağrılacaktır.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 40


Main Nedir?

• Ekrana yazı yazan bir (application) uygulama:

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 41


Main Nedir?

• Java'da her birim bir sınıf olmak zorundadır. Bağımsız değer


(variable) veya fonksiyon (function) yoktur. Her değer veya
function mutlaka bir class'ın içinde yer alır.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 42


Main Nedir?

• Her uygulama aslında özel bazı koşullara sahip bir


class'dır. Bir class uygulama olarak çalıştırılacağı zaman, o
class'ın main() method'unu bulur ve oradan itibaren çalıştırır.
Bu method yukarıdaki şekliyle aynen bulunmalıdır yoksa Java
bu class'ın bir program olduğunu anlayamaz.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 43


Public, Void,
Public, Static
Void, Static nedir?
nedir?

• Public sınıf bildirimi

• Public değişken bildirimi

• Public metot bildirimi

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 44


Void
Void nedir?
nedir?

• Main metodunun ekrana yazma işlemi haricinde herhangi


değişik bir sonucun geri döndürmediğini ifade eder. Örnekte
ondan sonra gelen küme parantezi sayesinde main
metodunu başlatmış oluyoruz.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 45


Static nedir?

• Static değişken için sistem ana bellekte bir yer açmıştır ve


kullanılmaya hazırdır. Onu ayrıca programcının yaratmasına
gerek yoktur.
• Static anahtar kelimesi kullanılarak oluşturulan değişkenler
nesne değişkeni değil “sınıf değişkeni” olarak adlandırılırlar.
Bu değişkenler nesneye ait değil, sınıfa ait bilgileri taşırlar.
Sınıf değişkenleri içinde tanımlandığı sınıftan hiçbir nesne
oluşturulmamış olsa bile bellekte yer kaplarlar.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 46


Static nedir?

• Nesne değişkenleri ise ancak bir nesne tanımlandığında


bellekte yer kaplarlar. Bu iki tür değişkenin ayrıldığı bir başka
nokta da sınıf değişkenlerinin sadece bir örneğinin olmasıdır.
Yani o sınıftan kaç tane nesne oluşturulursa oluşturulsun,
bellekte tek bir tane sınıf değişkeni vardır ve ne şekilde
erişirsek erişelim, aynı sınıf değişkenine erişiriz.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 47


Static nedir?

• Nesne yaratmadan bir sınıfın değişkeninin veya metodunun


kullanılması için o değişkenin ve metodun static olması
gerekir.

Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 48

You might also like