Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Bölüm 6 – Metodlar ve Parametreler

Benzer bir sunumlar


... konulu sunumlar: "Bölüm 6 – Metodlar ve Parametreler"— Sunum transkripti:

1 Bölüm 6 – Metodlar ve Parametreler
İçindekiler Giriş Java’da Program Moduleri Math-Class Metodları Method Tanıtımı Argumanın Veri Tipi Yükseltmesi Random-Sayı Üretmek Erişim Alanları JApplet Sınıfının Metodları Method Overloading (Aşırı Yükleme ) Yineleme Yineleme Problemlerine Örnek: The Fibonacci Series Yineleme ve Döngüler

2 6.1 Giriş Modüller Problemi küçük parçalara ayırma
e.g., böl ve fethet Büyük ve kompleks problemlerin dizaynını, implementasyonunu ve bakımını kolaylaştırır.

3 6.2 Java’da Program Modülleri
Java’da Modüller Methodlar Sınıflar (Classlar) Java API birçok modül sağlar. Programcılarda aynı zamanda kendileri modüller oluşturabilirler. e.g., kullanıcı tanımlı metodlar Metodlar Metod çağrıcı tarafından uyarılır. Metod çağırana bir değer dönderir. Bir yöneticinin bir personeline işini bitirip bitirmediğini sorması gibi.

4 Fig. 6.1 Yönetici-metod / işçi metod arasındaki hiyerarşik ilişki.

5 6.3 Math-Sınıfı Methodları
Class java.lang.Math Çok kullanılan matematik hesaplamaları sağlar 900.0 sayısının kare kökünü al: Math.sqrt( ) Method sqrt class Math sınıfına ait Nokta (.) sqrt methoduna erişimi sağlıyor. Argument ise parantez içine yazılır.

6

7 6.4 Metodların Tanıtımı Metodlar
Programcıya modülerize olmuş program yazma imkanını sağlar. Programın yönetimini artırır. Yazılımların yeniden kullanabilirliği sağlar. Kodların tekrarlanmasını engeller. Lokal değişkenler Metod içinde tanıtılırlar. Parametreler Metod ile metodu çağıran arasında bilgi alışverişini sağlarlar.

8 Metodların Tanıtımı Programcı kendi metodlarını yazabilir.

9 import java.applet.*; import java.awt.*; public class Max extends Applet { public void paint(Graphics g){ int y=20; int sonuc=0; for ( int sayac = 1; sayac <= 10; sayac++ ) { sonuc = karesi( sayac ); // method call g.drawString (""+sayac+" karesi ="+sonuc,30,y+=20); } // end for } public int karesi( int sayi ) { return sayi * sayi; // return square of y } // end method

10 Metod ayrıca return değerleri de olabilir:
6.4 Method Tanıtımı Metod tanıtımının genel formatı: geri-dönüş-tipi metod-ismi( parametre1, parametre2, …, parametreN ) { değişken tanıtımı ve kod bloğu } Metod ayrıca return değerleri de olabilir: return değer;

11 // Üçgen çizdirme programı
import java.awt.*; import java.applet.Applet; public class TriangleTry extends Applet { public void paint(Graphics g) { int bottomX=80; int bottomY=200; int base=100; int height=110; g.drawLine(bottomX,bottomY, bottomX+base,bottomY); g.drawLine(bottomX+base,bottomY,bottomX+base/2,bottomY-height); g.drawLine(bottomX+base/2,bottomY-height, bottomX,bottomY); }

12 // Üçgen çizdirme metodu
import java.awt.*; import java.applet.Applet; public class TriangleMethodDemo extends Applet { public void paint(Graphics g) { drawTriangle(g,80,200,100,110); drawTriangle(g,125,220,60,70); } private void drawTriangle(Graphics g,int bottomX, int bottomY, int base,int height) { int rightX = bottomX+base; int topX = bottomX+base/2; int topY = bottomY-height; g.drawLine(bottomX,bottomY, rightX,bottomY); g.drawLine(rightX,bottomY,topX,topY); g.drawLine(topX,topY, bottomX,bottomY);

13 6.4 Method Tanıtımı Metod geri değer döndermiyorsa;
Metod tanıtımı private void methodIsmi (veri-tipi parametre-listesi){ gövde } Metod çağırımı methodIsmi (parametre-listesi) Metod geri değer dönderiyorsa private int methodIsmi (veri-tipi parametre-listesi){ return değer; int n=methodIsmi ( parametre-listesi) Metodun parametresi yok ise; private void methodIsmi (){

14 // Ev çizimi import java.awt.*; import java.applet.Applet; public class HouseDemo extends Applet { public void paint(Graphics g) { drawHouse(g,50,50, 70,30); drawHouse(g,100,50,60,20); } private void drawTriangle(Graphics g,int bottomX, int bottomY, int base,int height) { g.drawLine(bottomX,bottomY, bottomX+base,bottomY); g.drawLine(bottomX+base,bottomY,bottomX+base/2,bottomY-height); g.drawLine(bottomX+base/2,bottomY-height, bottomX,bottomY); private void drawHouse(Graphics g,int bottomX,int bottomY, int width,int height) { g.drawRect(bottomX, bottomY-height, width,height); drawTriangle(g,bottomX, bottomY-height,width, height/2);

15 User inputs three Strings
// Fig. 6.4: MaximumTest.java // Finding the maximum of three floating-point numbers. import java.awt.Container; 4 import javax.swing.*; 6 public class MaximumTest extends JApplet { 8 // initialize applet by obtaining user input and creating GUI public void init() { // obtain user input String s1 = JOptionPane.showInputDialog( "Enter first floating-point value" ); String s2 = JOptionPane.showInputDialog( "Enter second floating-point value" ); String s3 = JOptionPane.showInputDialog( "Enter third floating-point value" ); 19 // convert user input to double values double number1 = Double.parseDouble( s1 ); double number2 = Double.parseDouble( s2 ); double number3 = Double.parseDouble( s3 ); 24 double max = maximum( number1, number2, number3 ); // method call 26 // create JTextArea to display results JTextArea outputArea = new JTextArea(); 29 // display numbers and maximum value outputArea.setText( "number1: " + number1 + "\nnumber2: " + number2 + "\nnumber3: " + number3 + "\nmaximum is: " + max ); 33 Maximum.java Lines User inputs three Strings Lines Convert Strings to doubles Line 25 Method init passes doubles as arguments to method maximum User inputs three Strings Convert Strings to doubles Method init passes doubles as arguments to method maximum

16 Method maximum returns value from method max of class Math
// get applet's GUI component display area Container container = getContentPane(); 36 // attach outputArea to Container c container.add( outputArea ); 39 } // end method init 41 // maximum method uses Math class method max to help // determine maximum value public double maximum( double x, double y, double z ) { return Math.max( x, Math.max( y, z ) ); 47 } // end method maximum 49 50 } // end class Maximum Maximum.java Line 46 Method maximum returns value from method max of class Math Method maximum returns value from method max of class Math

17 6.5 Argumanın Veri Tipi Yükseltmesi
Argumanlarda zorlama Argumanlar metodlarda geçerken veri tipleri aynı olması gerekir. e.g., System.out.println( Math.sqrt( 4 ) ); Önce “ Math.sqrt( 4 )” hesaplanır Sonra “ System.out.println()” hesaplanır. Veri tipi yükseltme kuralları Veri değeri kaybolmadan, nasıl tiplerin yükseltileceğinden bahsedeceğiz.

18 Veri Tipi Dönüşümü 2 tür tip dönüşümü vardır Otomatik tip dönüşümü
Daraltma yaparak tip dönüşü (cast) Genişletici bir dönüşüm

19 Daraltma yaparak tip dönüşü (cast)
Veri Tipi Dönüşümü Daraltma yaparak tip dönüşü (cast) Varolan veriyi daraltarak başka uyumlu bir veri tipine sığdırma (hedef-tip) değer

20 Örnek 1 int a; byte b; // ... b = (byte) a; Örnek 2 // Demonstrate casts. class Conversion { public static void main(String args[]) { int i = 257; double d = ; System.out.println("\nConversion of int to byte."); b = (byte) i; System.out.println("i and b " + i + " " + b); System.out.println("\nConversion of double to int."); i = (int) d; System.out.println("d and i " + d + " " + i); System.out.println("\nConversion of double to byte."); b = (byte) d; System.out.println("d and b " + d + " " + b); }

21 İfadelerde Otomatik Tip Yükseltilmesi
Örnek 3 byte a = 40; byte b = 50; byte c = 100; int d = a * b / c; Örnek 4 b = b * 2; // Error! Cannot assign an int to a byte! Örnek 5 b = (byte)(b * 2); listing 21 class Promote { public static void main(String args[]) { byte b = 42; char c = 'a'; short s = 1024; int i = 50000; float f = 5.67f; double d = .1234; double result = (f * b) + (i / c) - (d * s); System.out.println((f * b) + " + " + (i / c) + " - " + (d * s)); System.out.println("result = " + result); }

22 Java random-sayı üreticisi
6.7 Random-Sayı Üretme Java random-sayı üreticisi Math.random() ( int ) ( Math.random() * 6 ) 0 ile 5 arası integer sayı üretir.

23 Produce integers in range 1-6
// Fig. 6.7: RandomIntegers.java // Shifted, scaled random integers. import javax.swing.JOptionPane; 4 public class RandomIntegers { 6 public static void main( String args[] ) { int value; String output = ""; 11 // loop 20 times for ( int counter = 1; counter <= 20; counter++ ) { 14 // pick random integer between 1 and 6 value = 1 + ( int ) ( Math.random() * 6 ); 17 output += value + " "; // append value to output 19 // if counter divisible by 5, append newline to String output if ( counter % 5 == 0 ) output += "\n"; 23 } // end for 25 RandomIntegers.java Line 16 Produce integers in range 1-6 Line 16 Math.random returns doubles. We cast the double as an int Produce integers in range 1-6 Math.random returns doubles. We cast the double as an int

24 RandomIntegers.java 26 JOptionPane.showMessageDialog( null, output,
"20 Random Numbers from 1 to 6", JOptionPane.INFORMATION_MESSAGE ); 29 System.exit( 0 ); // terminate application 31 } // end main 33 34 } // end class RandomIntegers RandomIntegers.java

25 Produce integers in range 1-6
// Fig. 6.8: RollDie.java // Roll a six-sided die 6000 times. import javax.swing.*; 4 public class RollDie { 6 public static void main( String args[] ) { int frequency1 = 0, frequency2 = 0, frequency3 = 0, frequency4 = 0, frequency5 = 0, frequency6 = 0, face; 11 // summarize results for ( int roll = 1; roll <= 6000; roll++ ) { face = 1 + ( int ) ( Math.random() * 6 ); 15 // determine roll value and increment appropriate counter switch ( face ) { 18 case 1: frequency1; break; 22 case 2: frequency2; break; 26 case 3: frequency3; break; 30 RollDie.java Line 14 Produce integers in range 1-6 Lines Increment appropriate frequency counter, depending on randomly generated number Produce integers in range 1-6 Increment appropriate frequency counter, depending on randomly generated number

26 RollDie.java 31 case 4: 32 ++frequency4; 33 break; 34 35 case 5:
38 case 6: frequency6; break; 42 } // end switch 44 } // end for 46 JTextArea outputArea = new JTextArea(); 48 outputArea.setText( "Face\tFrequency" + "\n1\t" + frequency1 + "\n2\t" + frequency2 + "\n3\t" + frequency3 + "\n4\t" + frequency4 + "\n5\t" + frequency5 + "\n6\t" + frequency6 ); 53 JOptionPane.showMessageDialog( null, outputArea, "Rolling a Die 6000 Times", JOptionPane.INFORMATION_MESSAGE ); 56 System.exit( 0 ); // terminate application 58 } // end main 60 61 } // end class RollDie RollDie.java

27

28 6.9 Erişim Alanları Alan Basit alan kuralları Bir parametre alanı
lokal-değişken alanı Etiketli break veya continue ifadelerinde etiketin alanı for deyiminde başlarken tanımlı değişkenlerin alanı Bir sınıfın değişkeni yada metodunun alanı

29 6.9 Erişim Alanları class Scope {
// Demonstrate block scope. class Scope { public static void main(String args[]) { int x; // known to all code within main x = 10; if(x == 10) { // start new scope int y = 20; // known only to this block // x and y both known here. System.out.println("x and y: " + x + " " + y); x = y * 2; } // y = 100; // Error! y not known here // x is still known here. System.out.println("x is " + x);

30 Local variable x has block scope
// Fig. 6.10: Scoping.java // A scoping example. import java.awt.Container; 4 import javax.swing.*; 6 public class Scoping extends JApplet { JTextArea outputArea; 9 // x bu sınıfın tüm metodlarından ulaşılabilir. int x = 1; 12 // create applet's GUI public void init() { outputArea = new JTextArea(); Container container = getContentPane(); container.add( outputArea ); 19 } // end method init 21 // start metodu init metodu bitişinde çağrılır. 23 public void start() { int x = 5; // start metodunun local değişkeni 27 outputArea.append( "local x in start is " + x ); 29 Scoping.java Line 11 field x Line 26 Local variable x Line 28 Method start uses local variable x Field x has class scope Local variable x has block scope Method start uses local variable x

31 Re-create variable x and initialize it to 25
useLocal(); // useLocal has local x useField(); // useInstance uses Scoping's field x useLocal(); // useLocal reinitializes local x useField(); // Scoping's field x retains its value 34 outputArea.append( "\n\nlocal x in start is " + x ); 36 } // end method start 38 // useLocal creates and initializes local variable x during each call public void useLocal() { int x = 25; // initialized each time useLocal is called 43 outputArea.append( "\n\nlocal x in useLocal is " + x + " after entering useLocal" ); x; outputArea.append( "\nlocal x in useLocal is " + x + " before exiting useLocal" ); 49 } // end method useLocal 51 Scoping.java Line 42 Recreate variable x and initialize it to 25 Lines Method useLocal uses local variable x Re-create variable x and initialize it to 25 Method useLocal uses local variable x

32 Scoping.java Lines 53-61 Method useField uses field x
// useField modifies Scoping's field x during each call public void useField() { outputArea.append( "\n\nfield x is " + x + " on entering useField" ); x *= 10; outputArea.append( "\nfield x is " + x + " on exiting useField" ); 60 } // end method useInstance 62 63 } // end class Scoping Scoping.java Lines Method useField uses field x Method useField uses field x

33 6.16 JApplet Sınıfının Metodları
Java API birçok JApplet metodları tanımlamıştır. Bu metodları yeniden JApplet te tanıtmaya overriding (eskisini geçersiz kılma) denir.

34 Metod Açıklama public void init ()
Applet yüklenirken bir defa çağrılır.Appletin yüklenirken ilk değerleri almasını gerçekleştirir.Bu metodda yapılan işler ; değişkenlere ilk değer verme, GUI araçlarını oluşturma, ses dosyalarını yükleme, resimleri yükleme public void start () init() metodu bittikten sonra çağrılır veya kullanıcı başka bir web sayfasına geçiş yapıp tekrar appletli web sayfasına döndüğünde start() metodu tekrar çağrılır. Bu metodda yapılan işler; animasyon veya thread başlatmak public void paint (Graphics g) init() metodu bitiminde, start() metodu başlangıcında çizim metodu çağrılır.Appletin yeniden çizimine ihtiyaç olduğu heran bu metod çağrılır. public void stop () Kullanıcı appletli web sayfasını terk ettiğinde çalışan herşey askıya alınır.Animasyon yada threadlerin durması gibi... public void destroy () Appletin bellekten silineceği zaman çağrılır.Kullanıcı sayfayı kapattığında olduğu gibi...

35 6.15 Method Overloading (Aşırı Yükleme)
Aynı isimli birden fazla metod olabilir. Her metod için ayrı parametreler set edilir. Parametre sayısı Parametre tipi

36 Method square receives an int as an argument
// Fig. 6.12: MethodOverload.java // Using overloaded methods import java.awt.Container; 4 import javax.swing.*; 6 public class MethodOverload extends JApplet { 8 // create GUI and call each square method public void init() { JTextArea outputArea = new JTextArea(); Container container = getContentPane(); container.add( outputArea ); 15 outputArea.setText( "The square of integer 7 is " + square( 7 ) + "\nThe square of double 7.5 is " + square( 7.5 ) ); 18 } // end method init 20 // square method with int argument public int square( int intValue ) { System.out.println( "Called square with int argument: " + intValue ); 26 return intValue * intValue; 28 } // end method square with int argument 30 MethodOverload.java Lines Method square receives an int as an argument Method square receives an int as an argument

37 Overloaded method square receives a double as an argument
// square method with double argument public double square( double doubleValue ) { System.out.println( "Called square with double argument: " + doubleValue ); 36 return doubleValue * doubleValue; 38 } // end method square with double argument 40 41 } // end class MethodOverload Overloaded method square receives a double as an argument MethodOverload.java Lines Overloaded method square receives a double as an argument Called square with int argument: 7 Called square with double argument: 7.5

38 1 // Fig. 6.13: MethodOverload.java
// Overloaded methods with identical signatures. import javax.swing.JApplet; 4 public class MethodOverload extends JApplet { 6 // declaration of method square with int argument public int square( int x ) { return x * x; } 12 // second declaration of method square // with int argument causes syntax error public double square( int y ) { return y * y; } 19 20 } // end class MethodOverload MethodOverload.java Lines 8 and 15 Compiler cannot distinguish between methods with identical names and parameter sets Fig Compiler error messages generated from overloaded methods with identical parameter lists and different return types. Compiler cannot distinguish between methods with identical names and parameter sets MethodOverload.java:15: square(int) is already defined in MethodOverload public double square( int y ) ^ 1 error

39 6.12 Recursion (Yineleme) Yineleme metodu
Başka metoddan kendisini çağırması Metod sadece ilk değer sonucunu bilir. Method problemi 2’ye ayırır İlk kısım Basit problemler Problem çözülene dek problemi küçük parçalara ayırıp sonucunu bulur. Yineleyerek çağırma Yineleme basamakları

40 Fig. 6.14 Recursive evaluation of 5!.
Final value = 120 5! 5! 5! = 5 * 24 = 120 is returned 5 * 4! 5 * 4! 4! = 4 * 6 = 24 is returned 4 * 3! 4 * 3! 3! = 3 * 2 = 6 is returned 3 * 2! 3 * 2! 2! = 2 * 1 = 2 is returned 2 * 1! 2 * 1! 1 returned 1 1 (a) Sequence of recursive calls. (b) Values returned from each recursive call. Fig Recursive evaluation of 5!.

41 FactorialTest.java Line 21 Invoke method factorial
// Fig. 6.15: FactorialTest.java // Recursive factorial method. import java.awt.*; 4 import javax.swing.*; 6 public class FactorialTest extends JApplet { JTextArea outputArea; 9 // create GUI and calculate factorials of 0-10 public void init() { outputArea = new JTextArea(); 14 Container container = getContentPane(); container.add( outputArea ); 17 // calculate the factorials of 0 through 10 for ( long counter = 0; counter <= 10; counter++ ) outputArea.append( counter + "! = " + factorial( counter ) + "\n" ); 22 } // end method init 24 FactorialTest.java Line 21 Invoke method factorial Invoke method factorial

42 Test for base case (method factorial can solve base case)
// recursive declaration of method factorial public long factorial( long number ) { // base case if ( number <= 1 ) return 1; 31 // recursive step else return number * factorial( number - 1 ); 35 } // end method factorial 37 38 } // end class FactorialTest Test for base case (method factorial can solve base case) FactorialTest.java Lines Test for base case (method factorial can solve base case) Line 34 Else return simpler problem that method factorial might solve in next recursive call Else return simpler problem that method factorial might solve in next recursive call

43 6.13 Yineleme Problemlerine Örnek The Fibonacci Series
Each number in the series is sum of two previous numbers e.g., 0, 1, 1, 2, 3, 5, 8, 13, 21… fibonacci(0) = 0 fibonacci(1) = 1 fibonacci(n) = fibonacci(n - 1) + fibonacci( n – 2 ) fibonacci(0) and fibonacci(1) are base cases Golden ratio (golden mean)

44 FibonacciTest.java 1 // Fig. 6.16: FibonacciTest.java
// Recursive fibonacci method. import java.awt.*; import java.awt.event.*; 5 import javax.swing.*; 7 public class FibonacciTest extends JApplet implements ActionListener { JLabel numberLabel, resultLabel; JTextField numberField, resultField; 11 // set up applet’s GUI public void init() { // obtain content pane and set its layout to FlowLayout Container container = getContentPane(); container.setLayout( new FlowLayout() ); 18 // create numberLabel and attach it to content pane numberLabel = new JLabel( "Enter an integer and press Enter" ); container.add( numberLabel ); 22 // create numberField and attach it to content pane numberField = new JTextField( 10 ); container.add( numberField ); 26 // register this applet as numberField’s ActionListener numberField.addActionListener( this ); 29 FibonacciTest.java

45 Method actionPerformed is invoked when user presses Enter
// create resultLabel and attach it to content pane resultLabel = new JLabel( "Fibonacci value is" ); container.add( resultLabel ); 33 // create numberField, make it uneditable // and attach it to content pane resultField = new JTextField( 15 ); resultField.setEditable( false ); container.add( resultField ); 39 } // end method init 41 // obtain user input and call method fibonacci public void actionPerformed( ActionEvent event ) { long number, fibonacciValue; 46 // obtain user’s input and convert to long number = Long.parseLong( numberField.getText() ); 49 showStatus( "Calculating ..." ); 51 // calculate fibonacci value for number user input fibonacciValue = fibonacci( number ); 54 // indicate processing complete and display result showStatus( "Done." ); resultField.setText( Long.toString( fibonacciValue ) ); 58 } // end method actionPerformed 60 FibonacciTest.java Line 43 Method actionPerformed is invoked when user presses Enter Line 45 We use long, because Fibonacci numbers become large quickly Lines Pass user input to method fibonacci Method actionPerformed is invoked when user presses Enter We use long, because Fibonacci numbers become large quickly Pass user input to method fibonacci

46 Test for base case (method fibonacci can solve base case)
// recursive declaration of method fibonacci public long fibonacci( long n ) { // base case if ( n == 0 || n == 1 ) return n; 67 // recursive step else return fibonacci( n - 1 ) + fibonacci( n - 2 ); 71 } // end method fibonacci 73 74 } // end class FibonacciTest Test for base case (method fibonacci can solve base case) FibonacciTest.java Lines Test for base case (method fibonacci can solve base case) Lines Else return simpler problem that method fibonacci might solve in next recursive call Else return simpler problem that method fibonacci might solve in next recursive call

47 FibonacciTest.java

48 FibonacciTest.java

49 Fig. 6.17 Set of recursive calls for fibonacci (3).
return + return 1 fibonacci( 2 ) fibonacci( 1 ) fibonacci( 0 ) return 0 fibonacci( 3 ) Fig Set of recursive calls for fibonacci (3).

50 6.14 Yineleme ve Döngüler Döngüler Yineleme
Döngü deyimleri kullanılır (for, while veya do…while) Döngü bitişi şart ile kontrol edilir. Sayaç kullanarak döngü kontrol edilir. Yineleme Seçim deyimleri kullanılır (if, if…else veya switch) Tekrarlama metdodun yeniden çağrılması ile olur. İlk değer önem taşır Problem küçük kısımlara ayrılarak tekrarlama kontrol edilir.

51 6.14 Yineleme ve Döngüler Yineleme
Döngülerden daha fazla ek yük getirir. Daha fazla bellek harcanır Genelde birkaç satır kod ile problem çözülür.


"Bölüm 6 – Metodlar ve Parametreler" indir ppt

Benzer bir sunumlar


Google Reklamları