CENG 217 Object Oriented Design. Doç. Dr. Halûk Gümüşkaya /

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "CENG 217 Object Oriented Design. Doç. Dr. Halûk Gümüşkaya haluk@gumuskaya.com / haluk@fatih.edu.tr http://www.gumuskaya.com"

Transkript

1 CENG 217 Object Oriented Design Lecture 5 Doç. Dr. Halûk Gümüşkaya haluk@gumuskaya.com / haluk@fatih.edu.tr Computing Engineering Department Fatih University Friday, December 09,

2 Modeller ve GUI Programlama 2

3 Dersin Anahatları 1. Model olarak Döngüler (Iterator) 2. Model Konsepti 3. Gözleyici (Observer) Modeli 4. Yapımodeli Yöneticileri (Layout Managers) ve Strateji (STRATEGY) Modeli 5. Bileşenler, Taşıyıcılar, ve Bileşik (COMPOSITE) Modeli 6. Kaydırma Çubukları ve Dekoratör (DECORATOR) Modeli 7. Modelleri Nasıl Anlayabiliriz? 8. Modelleri işlevsel hale Getirme 3

4 Liste Döngüleri LinkedList<String> list =...; ListIterator<String> iterator = list.listiterator(); while (iterator.hasnext()) { String current = iterator.next();... Neden Döngüler? 4

5 Traverse links directly Klasik Liste Data Yapısı Link currentlink = list.head; while (currentlink!= null) { Object current = currentlink.data; currentlink = currentlink.next; Uygulama görünür haldedir. Hatalara karşı dayanıksızdır. 5

6 Kuyruk Veri Yapılarının Üst Düzey Görünümü Rastgele Erişimli Dizin Liste??? 6

7 İmleçli Liste for (list.reset(); list.hasnext(); list.next()) { Object x = list.get();... Dezavantaj: Liste başına sadece bir İmleç Döngü bir üst konsepttir. 7

8 1. Model olarak Döngüler (Iterator) 2. Model Konsepti 3. Gözleyici (Observer) Modeli 4. Yapımodeli Yöneticileri (Layout Managers) ve Strateji (STRATEGY) Modeli 5. Bileşenler, Taşıyıcılar, ve Bileşik (COMPOSITE) Modeli 6. Kaydırma Çubukları ve Dekoratör (DECORATOR) Modeli 7. Modelleri Nasıl Anlayabiliriz? 8. Modelleri işlevsel hale Getirme 8

9 Model Mantığı Tarihi: Mimari Modeller Christopher Alexander Her model; Kısa bir isme, Konunun kısa bir özetine, Problemin uzunca bir tanımına, Çözüm için bir reçeteye sahiptir. 9

10 Kısa Koridor Modeli Özet "...Uzun, sıkıcı koridorlar modern mimaride herşeyin kötü görünmesine neden olurlar..." Problem İçkarartıcı bir resim. Işığın ve mobilyanın önemli noktaları Hastanelerdeki hastaların endişeleri üzerinde yapılan araştırmalar 50 ft. üzerindeki koridorların rahatsız edici olduğunu söyleyen araştırmalar 10

11 Çözüm Kısa Koridor Modeli Koridorlar kısa tutulmalı. Olabildiğince çok çiçek, halı, kitaplık, pencere vb. eşyalarla odalara benzetilmeli. Şekil olarak geniş ve bolca ışık alacak şekilde yapılmalı. En iyi koridor tipi tüm duvar boyunca penceresi olan koridorlardır. 11

12 Neden Patternler? Nesne tabanlı yazılımı dizayn etmek zordur, yeniden kullanılabilir nesne tabanlı program geliştirmek dahada zordur. Eric Gamma Tecrübeli dizaynırlar eskiden karşılaşmış oldukları problemlere buldukları çözümleri yeniden kullanırlar. İyi dizayn edilmiş bir nesne tabanlı sistemlerde sınıf ve nesne patternlerine sahiptir. Patternlerle daha önce çalışan dizaynerlar daha üretken olurlar. Ürettmiş oldukları yazılımda daha kullanışlı ve tekrar kullanılabilir olur. 12

13 Design Patternlerin Faydaları Developerlar arasındaki iletişimi geliştirir. İyi dizayn edilen bir yazılımın tekrar kullanılmasını kolaylaştırır. Dizayn üzerinde yapacağınız değişiklikleri kolaylaştırır. Dökümantasyonunuzu geliştirir. Dizaynın anlaşılabilirliğini artırır. 13

14 Design Patternlerin Dezavantajları Patternler sizi doğrudan kodun yeniden kullanımına götürmezler. Patternler aldatıcı şekilde basittirler. Takımlar patternlerin aşırı kullanılması sonucu kötüye gidebilirler. Patternler tecrübe ve münazara ile onaylanır,anlaşılır.. Sürekli test ederek değil. 14

15 Yazılım Patternlerinin Tarihi Cunningham ve Beck Alexanderın pattern fikirlerini geliştirip, küçük bir pattern dili olan Smalltalk u geliştirdiler The Gang of Four (Gamma, Helm, Johnson and Vlissides) design pattern kataloğu hakkında çaloşmaya başladılar Bruce Anderson ilk Patterns Workshop(atelyeyi) u OOPSLA oluşturdu Kent Beck and Grady Booch ilk buluşmaya sponsor oldular. (Hillside Group) First Pattern Languages of Programs (PLoP) conference The Gang of Four (GoF) Design Patterns kitabı yayınladı. 15

16 GoF (Gang of Four) Design Patterns Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (Gang of Four GoF), Design Patterns: Elements of Reusable Object-Oriented Software, Addison Wesley, Kitapta tanımlanan toplam 23 tane pattern vardır. Ve bunlar 3 alana ayrılmıştır: Creational, Structural, ve Behavioral. 16

17 GoF Design Patternlerinin sınıflandırılması 17

18 GoF Design Patternlerinin Gerekli Elemanları 18

19 GoF Pattern Template(kalıp) 19

20 GoF Pattern Template (devamı) 20

21 GoF Pattern Template (Devamı) 21

22 GoF Gösterim Şekli Nesne ve Sınıf diagramlarının gösterimi için GoF kitabı Object Modeling Technique (OMT) notasyonlarını(şeklini) kullanıyor. Notational özellikler Attributler, methodlardan sonra gelir. Associationlar bildik,tanıdık Çokluk koyu yuvarlaklar halinde gösterilir. Kalıtım üçgen şeklinde gösterilir. 22

23 GoF Gösterim şekli 23

24 Design Patternlerin UML gösterimi UML i design patternlerde göreceğiz. 24

25 Creational Patternler (5 patterns) Factory Method (OODP Chp10) Method in a derived class creates associates Abstract Factory Birbirleri arasında ilişkili nesne üretmek. Builder Karmaşık bir objenin oluşumu sağlamak Prototype Bir instance ın çoğaltmak için kullanılır Singleton (OODP Chp10) Sadece ve sadece bir nesnenin oluşturulmasına izin verir. 25

26 Structural Patternleri (7 patterns) Adapter (OODP Chp10) Translator adapts a server interface for a client Bridge Abstraction for binding one of many implementations Composite (OODP Chp5) Structure for building recursive aggregations Decorator (OODP Chp5) Decorator extends an object transparently Facade Facade simplifies the interface for a subsystem Flyweight Many fine-grained objects shared efficiently Proxy (OODP Chp10) One object approximates another 26

27 Behavioral Patternleri (11 patterns) Chain of Responsibility Request delegated to the responsible service provider Command (OODP Chp10) Request as first-class object Interpreter Language interpreter for a small grammar Iterator (OODP Chp5) Aggregate elements are accessed sequentially Mediator Mediator coordinates interactions between its associates Memento Snapshot captures and restores object states privately 27

28 Behavioral Patternleri (continued) Observer (OODP Chp5) Dependents update automatically when a subject changes State Object whose behavior depends on its state Strategy (OODP Chp5) Abstraction for selecting one of many algorithms Template Method Algorithm with some steps supplied by a derived class Visitor (OODP Chp10) Operations applied to elements of an heterogeneous object structure 28

29 GoF Patternleri arasındaki ilişkiler 29

30 Döngü (Iterator) Modeli Özet 1. Bir nesneyi oluşturan elemanlar vardır. 2. Kullanıcılar bu elemanlara ulaşmak isteyebilirler. 3. Nesnemiz iç yapısını dıştan göstermemelidir. 4. Bir çok kullanıcı sınırsız erişim isteyebilir. Çözüm 1. Her elemanı bir kere getiren bir döngü tanımlanır. 2. Her döngü elemanı bir sonraki elemanın pozisyonunu kaydeder. 3. Eğer birden fazla nesne varsa, nesnelerin sık kullanılan arayüz tiplerini ayırt edebilmesi en iyisidir. Bu şekilde kullanıcının sadece arayüz tiplerini bilmesi yeterli olur. Kesin kalıplara gerek kalmaz. 30

31 Döngü (Iterator) Modeli 31

32 Döngü (Iterator) Modeli Modeldeki isimler örnekleri oluşturur. Names differ in each occurrence of pattern Dizayn Modelindeki İsim Aggregate ConcreteAggregate Iterator ConcreteIterator createiterator() next() isdone() currentitem() Bağlı Listede kullanılan İsim List LinkedList ListIterator anonymous class implementing ListIterator listiterator() next() opposite of hasnext() return value of hasnext() 32

33 1. Model olarak Döngüler (Iterator) 2. Model Konsepti 3. Gözleyici (Observer) Modeli 4. Yapımodeli Yöneticileri (Layout Managers) ve Strateji (STRATEGY) Modeli 5. Bileşenler, Taşıyıcılar, ve Bileşik (COMPOSITE) Modeli 6. Kaydırma Çubukları ve Dekoratör (DECORATOR) Modeli 7. Modelleri Nasıl Anlayabiliriz? 8. Modelleri işlevsel hale Getirme 33

34 Model/Görünüm/Düzenleyici Bazı programlar değiştirilebilir birden fazla görünüme sahiptirler. Örneğin: HTML Editörü WYSIWYG görünümü Yapısal Görünüm Kaynak Kod Görünümü Bir görünümdeki değişiklik diğerlerine de yansıtılmalı. Görünüm anlık olarak güncellenir. 34

35 HTML Editörü: MS FrontPage WYSIWYG Görünümü 35

36 MS FrontPage Kod Görünümü 36

37 MS FrontPage Yapısal (Navigation) Görünümü 37

38 Windows MVC architecture örneği: The model dosya ismi dp3.ppt. One view is a window titled CENG 534 Design Patterns. 38

39 Model: Veri Yapısı, görsel gösterim yok Model/Görünüm/Düzenleyici Görünümler: Görsel gösterimler Düzenleyiciler: Kullanıcıyla etkileşimler Görünüm/Düzenleyici güncelleme modeli Model Görünümlere veri değişikliklerini haber verir. Görünümler kendilerini günceller. 39

40 Gözleyici (Observer) Modeli Model; Görünümleri, onları ilgilendiren bir durum olduğunda uyarır. Buton; aksiyon dinleyicileri farklı bir durum olduğunda uyarır. Görünümler kendilerini uyarılmalarına göre Modele bağlarlar. Aksiyon Dinleyicileri kendilerini uyarılmalarına göre butona bağlarlar. Genelleme: Gözleyiciler kendilerini özneye bağlarlar. 40

41 Gözleyici (Observer) Modeli Özet 1. Özne adı verilen bir nesne olayların kaynağıdır. 2. Bir veya daha fazla gözleyici nesne, onları ilgilendiren bir olay olduğunda uyarılmalıdır. Çözüm 1. Bir gözleyici arayüzü tanımlanır. Bütün alt gözleyiciler bu arayüz üzerinden üretilir. 2. Özne gözleyicilerden oluşan bir koleksiyon içerir. 3. Özne gözleyici ekleme ve çıkarma için gerekli metodları içerir. 4. Bir olay olduğunda özne tüm gözleyicileri uyarır. 41

42 Gözleyici (Observer) Modeli 42

43 Observer Pattern Java 1.1 yeni GUI event model kısmı Observer patternden alıntı yapılarak hazırlanmıştır. Comparison to the Observer Pattern: Subject => eventin kaynağı (Example: JButton) Observer => Action Listener ConcreteObserver => Action Listener implementasyonu 43

44 Observer Pattern isimlendirmesi Design Pattern deki İsim Subject Observer Gerçek İsim (Swing buttons) JButton ActionListener ConcreteObserver attach() notify() ActionListener interface inden implements eden sınıf. addactionlistener() actionperformed() 44

45 Amaç Observer Pattern (GoF Kitabından ) one-to-many dependency(birden çok a doğru) nesneler arasında ilişki tanımlak bu vesile ile bir nesnenin durumu değiştiği zaman, o nesneye bağımlı olanlar haberdar edilecektir.. Also Known As Dependents, Publish-Subscribe, Model-View. Motivasyın Sınıflar kendi aralarında çok karışık bir şekilde bağlanmazlar. 45

46 Uygulanabilirliği (Applicability) Observer pattern şu gibi durumlarda uygulanmalıdır: Bir nesne üzerinde değişklik yaptığım zaman başka bir nesne üzerinde değişiklik yapmam gerekiyorsa bu pattern uygulanabilir. Eyer nesne diğer nesneleri uyarması gerekiyorsa bu pattern uygulanabilir. 46

47 yapısı (GoF kitabından alıntı) 47

48 Participants Subject The Elements of Observer Pattern Keeps track of its observers Provides an interface for attaching and detaching Observer objects Observer Defines an interface for update notification ConcreteSubject The object being observed Stores state of interest to ConcreteObserver objects Sends a notification to its observers when its state changes ConcreteObserver The observing object Stores state that should stay consistent with the subject's Implements the Observer update interface to keep its state consistent with the subject's 48

49 Consequences Benefits Minimal coupling between the Subject and the Observer Can reuse subjects without reusing their observers and vice versa Observers can be added without modifying the subject All subject knows is its list of observers Subject does not need to know the concrete class of an observer, just that each observer implements the update interface Subject and observer can belong to different abstraction layers Support for event broadcasting Liabilities Subject sends notification to all subscribed observers Observers can be added/removed at any time Possible cascading of notifications Observers are not necessarily aware of each other and must be careful about triggering updates Simple update interface requires observers to deduce changed item 49

50 Sample Code, Known Uses and Related Patterns Sample Code We'll see some Java soon! Known Uses Smalltalk Model/View/Controller user interface framework Model = Subject View = Observer Controller is whatever object changes the state of the subject Related Patterns Mediator To encapsulate complex update semantics 50

51 Together for Eclipse Architect 2006 ın Design Patterns Templatinin kullanımı Class By Templete kısmını kullanın veya diyagram üzerinde herhangi bir sınıf belirleyin ve herhangi bir Gof patternini uygulayın. 51

52 Templatin Seçimi ve Parametreleri Belirleme 52

53 Observerlar ve Observablar Together tarafından otomatik olarak üretiliyor Create Pattern Links: unchecked 53

54 Observerlar ve Observablar Together tarafından otomatik olarak üretiliyor Pattern linkleri üretiliyor: 54

55 import java.util.arraylist; import java.util.iterator; /** Subject */ public class Vehicle { Together tarafından üretilen dosyalar: nesne: Vehicle.java private ArrayList observers; /** PatternLink gof.observer Abstract Observer */ /* # private TrafficControl lnktrafficcontrol; */ public void attach(trafficcontrol observer) { observers.add(observer); public void detach(trafficcontrol observer) { observers.remove(observer); public void notifyobservers() { Iterator it = observers.iterator(); while (it.hasnext()) { ((TrafficControl) it.next()).update(this); 55

56 Objeleri oluşturulabilen nesneler(concreate object): Car, Truck, and Van /** * Stores state of interest to ConcreteObserver objects. * Sends a notification to its observers when its state changes. */ public class Car extends Vehicle { /** * Stores state of interest to ConcreteObserver objects. * Sends a notification to its observers when its state changes. */ public class Truck extends Vehicle { /** * Stores state of interest to ConcreteObserver objects. * Sends a notification to its observers when its state changes. */ public class Van extends Vehicle { 56

57 Traffic Control Interface and Concrete Observers /** Observer */ public interface TrafficControl { /** PatternLink gof.observer Abstract Subject */ /*# private Vehicle lnkvehicle;*/ void update(vehicle subject); /** * Implements the Observer updating interface to keep * its state consistent with the subject's. */ public class HighwayPatrol implements TrafficControl { public void update(vehicle subject) { //put your code here /** * Implements the Observer updating interface to keep * its state consistent with the subject's. */ public class Sheriff implements TrafficControl { public void update(vehicle subject) { //put your code here 57

58 Java Implementation of Observer Pattern We could implement the Observer pattern from scratch in Java But Java provides the Observable/Observer classes as built-in support for the Observer pattern The java.util.observable class is the base Subject class. Any class that wants to be observed extends this class. Provides methods to add/delete observers Provides methods to notify all observers A subclass only needs to ensure that its observers are notified in the appropriate mutators Uses a Vector for storing the observer references The java.util.observer interface is the Observer interface. It must be implemented by any observer class. 58

59 The java.util.observable Class public Observable() Construct an Observable with zero Observers public synchronized void addobserver(observer o) Adds an observer to the set of observers of this object public synchronized void deleteobserver(observer o) Deletes an observer from the set of observers of this object protected synchronized void setchanged() Indicates that this object has changed protected synchronized void clearchanged() Indicates that this object has no longer changed, or that it has already notified all of its observers of its most recent change. This method is called automatically by notifyobservers(). 59

60 The java.util.observable Class public synchronized boolean haschanged() Tests if this object has changed. Returns true if setchanged() has been called more recently than clearchanged() on this object; false otherwise. public void notifyobservers(object arg) If this object has changed, as indicated by the haschanged() method, then notify all of its observers and then call the clearchanged() method to indicate that this object has no longer changed. Each observer has its update() method called with two arguments: this observable object and the arg argument. The arg argument can be used to indicate which attribute of the observable object has changed. public void notifyobservers() Same as above, but the arg argument is set to null. That is, the observer is given no indication what attribute of the observable object has changed. 60

61 The java.util.observer Interface public abstract void update(observable o, Object arg) This method is called whenever the observed object is changed. An application calls an observable object's notifyobservers method to have all the object's observers notified of the change. Parameters: o - the observable object arg - an argument passed to the notifyobservers method 61

62 Observable/Observer Example 62

63 ConcreteSubject.java import java.util.observable; /** A subject to observe! */ public class ConcreteSubject extends Observable { private String name; private float price; public ConcreteSubject(String name, float price) { this.name = name; this.price = price; System.out.println("ConcreteSubject created: " + name + " at " + price); public String getname() { return name; public float getprice() { return price; public void setname(string name) { this.name = name; setchanged(); notifyobservers(name); public void setprice(float price) { this.price = price; setchanged(); notifyobservers(new Float(price)); 63

64 import java.util.observer; import java.util.observable; // An observer of name changes. public class NameObserver implements Observer { private String name; Name and Price Observers public NameObserver() { name = null; System.out.println("NameObserver created: Name is " + name); public void update(observable obj, Object arg) { if (arg instanceof String) { name = (String)arg; System.out.println("NameObserver: Name changed to " + name); import java.util.observer; import java.util.observable; // An observer of price changes. public class PriceObserver implements Observer { private float price; public PriceObserver() { price = 0; System.out.println("PriceObserver created: Price is " + price); public void update(observable obj, Object arg) { if (arg instanceof Float) { price = ((Float)arg).floatValue(); System.out.println("PriceObserver: Price changed to " + price); 64

65 TestObservers.java import java.util.observer; import java.util.observable; // Test program for ConcreteSubject, NameObserver and PriceObserver public class TestObservers { public static void main(string args[]) { // Create the Subject and Observers. ConcreteSubject s = new ConcreteSubject("Corn Pops", 1.29f); NameObserver nameobs = new NameObserver(); PriceObserver priceobs = new PriceObserver(); // Add those Observers! s.addobserver(nameobs); s.addobserver(priceobs); // Make changes to the Subject. s.setname("frosted Flakes"); s.setprice(4.57f); s.setprice(9.22f); s.setname("surge Crispies"); 65

66 Basit MVC Örneği: CounterGui import java.awt.event.*; import java.awt.*; public class CounterGui extends Frame { private int counter = 0; // Model! private TextField tf = new TextField(10); // View. public CounterGui(String title) { super(title); Panel tfpanel = new Panel(); tf.settext("0"); tfpanel.add(tf); add("north", tfpanel); Panel buttonpanel = new Panel(); Button incbutton = new Button("Increment"); incbutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { counter++; tf.settext(counter + ""); ); buttonpanel.add(incbutton); Button exitbutton = new Button("Exit"); exitbutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { System.exit(0); ); buttonpanel.add(exitbutton); add("south", buttonpanel); addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) { System.exit(0); ); public static void main(string[] argv) { CounterGui cg = new CounterGui("CounterGui"); cg.setsize(300, 100); cg.setvisible(true); Button decbutton = new Button("Decrement"); decbutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { counter--; tf.settext(counter + ""); ); buttonpanel.add(decbutton); Bu örnekteki controller nerede?? Controllerlar anonymous sınıflarının birer instance ıdır ve butona tıklanıldığı zaman bu aktion ı alır. 66

67 Account System based on MVC Architecture Advanced Java 2 Platform, How to Program, H. M. Deitel, kitabından alınmıstır..) 67

68 The Class Diagrams of the Account System 68

69 Sequence of Events 2.Kullanıcı Account ı yeniledi. :Controller 1. Event e view üye oluyor. 5. View ler yenilendi :AccountTextView 3. model Account değişikliğini aldı 4. Üyü olanlara değiştiğine Dair veri gonderildi. :AccountBarGrapView :AssetPieChartView 69

70 1. The ITERATOR as a Pattern 2. The Pattern Concept and Introduction to GoF Design Patterns 3. The OBSERVER Pattern 4. Layout Managers and the STRATEGY Pattern 5. Components, Containers, and the COMPOSITE Pattern 6. Scroll Bars and the DECORATOR Pattern 7. How to Recognize Patterns 8. Putting Patterns to Work 70

71 Gözleyici Modelindeki isimler Dizayn Modelindeki İsimler Subject Observer Swing Butonlarında kullanılan İsimler JButton ActionListener ConcreteObserver attach() notify() the class that implements the ActionListener interface type addactionlistener() actionperformed() 71

72 1. Model olarak Döngüler (Iterator) 2. Model Konsepti 3. Gözleyici (Observer) Modeli 4. Yapımodeli Yöneticileri (Layout Managers) ve Strateji (STRATEGY) Modeli 5. Bileşenler, Taşıyıcılar, ve Bileşik (COMPOSITE) Modeli 6. Kaydırma Çubukları ve Dekoratör (DECORATOR) Modeli 7. Modelleri Nasıl Anlayabiliriz? 8. Modelleri işlevsel hale Getirme 72

73 Yapıkalıpları Düzenleyicileri Kullanıcı arayüzleri bileşenlerden oluşmuştur. Bileşenler Taşıyıcılara yerleştirilmiştir. Taşıyıcı bileşenleri sıralamaya gerek duyar. Swing alt düzey kodlardan oluşan piksel kordinatları kullanmaz Avantajları: look and feel değiştirilebilir. Karakter dizinlerinin tüm sınıflar tarafından kullanılabilmesi. Yapıkalıpları yerleşmeyi kontrol eder. 73

74 Yapıkalıpları Düzenleyicileri FlowLayout: soldan sağa, sıra dolunca yeni bir satıra geçer. BoxLayout: soldan sağa veya yukarıdan aşağıya BorderLayout: 5 alan, Center (Merkez), North (Kuzey), South (Güney), East (Doğu), West (Batı) GridLayout: parçalar, tüm bileşenler aynı boyuttadır. GridBagLayout: karmaşık, HTML tablolarına benzer. 74

75 Yapıkalıpları Düzenleyicileri 75

76 Yapıkalıpları Düzenleyicileri Yapıkalıbı belirlenir: JPanel keypanel = new JPanel(); keypanel.setlayout(new GridLayout(4, 3)); Bileşenler eklenir. for (int i = 0; i < 12; i++) keypanel.add(button[i]); 76

77 Sesli Mesaj Sistemi GUI Yazı tabanlı sistemle aynı yapıya sahip Sadece Telephone sınıfı değişiyor. Klavye yerine butonlar Mikrofon ve hoparlör yerine yazı alanları 77

78 Sesli Mesaj Sistemi GUI Tuşları panele GridLayout kullanarak yerleştiriyoruz: JPanel keypanel = new JPanel(); keypanel.setlayout(new GridLayout(4, 3)); for (int i = 0; i < 12; i++) { JButton keybutton = new JButton(...); keypanel.add(keybutton); keybutton.addactionlistener(...); 78

79 Sesli Mesaj Sistemi GUI Hoparlör yerine BorderLayout kullanılan bir Panel: JPanel speakerpanel = new JPanel(); speakerpanel.setlayout(new BorderLayout()); speakerpanel.add(new JLabel("Speaker:"), BorderLayout.NORTH); speakerfield = new JTextArea(10, 25); speakerpanel.add(speakerfield, BorderLayout.CENTER); 79

80 Sesli Mesaj Sistemi GUI Hoparlör, tuş takımı ve mikrofon paneli content pane içine eklenir. Content pane zaten BorderLayout ile düzenlenmiştir. Ch5/mailgui/Telephone.java 80

81 Telephone.java (1) import java.awt.*; import java.awt.event.*; import javax.swing.*; // Presents a phone GUI for the voice mail system. public class Telephone { // Constructs a telephone with a speaker, keypad, and microphone. public Telephone() { JPanel speakerpanel = new JPanel(); speakerpanel.setlayout(new BorderLayout()); speakerpanel.add(new JLabel("Speaker:"), BorderLayout.NORTH); speakerfield = new JTextArea(10, 25); speakerpanel.add(speakerfield, BorderLayout.CENTER); String keylabels = " *0#"; JPanel keypanel = new JPanel(); keypanel.setlayout(new GridLayout(4, 3)); for (int i = 0; i < keylabels.length(); i++) { final String label = keylabels.substring(i, i + 1); JButton keybutton = new JButton(label); keypanel.add(keybutton); keybutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent event) { connect.dial(label); );.. 81

82 Telephone.java (2) final JTextArea microphonefield = new JTextArea(10,25); JButton speechbutton = new JButton("Send speech"); speechbutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent event) { connect.record(microphonefield.gettext()); microphonefield.settext(""); ); JButton hangupbutton = new JButton("Hangup"); hangupbutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent event) );.. { connect.hangup(); 82

83 Telephone.java (3) JPanel buttonpanel = new JPanel(); buttonpanel.add(speechbutton); buttonpanel.add(hangupbutton); JPanel microphonepanel = new JPanel(); microphonepanel.setlayout(new BorderLayout()); microphonepanel.add(new JLabel("Microphone:"), BorderLayout.NORTH); microphonepanel.add(microphonefield, BorderLayout.CENTER); microphonepanel.add(buttonpanel, BorderLayout.SOUTH); JFrame frame = new JFrame(); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.add(speakerpanel, BorderLayout.NORTH); frame.add(keypanel, BorderLayout.CENTER); frame.add(microphonepanel, BorderLayout.SOUTH); frame.pack(); frame.setvisible(true); // Give instructions to the mail system user. public void speak(string output) { speakerfield.settext(output); public void run(connection c) { connect = c; private JTextArea speakerfield; private Connection connect; 83

84 Form yapıkalıbı Özel bir Yapıkalıbı Tek numaralı bileşenler sağa hizalanır. Çift numaralı bileşenler sola hizalanır LayoutManager arayüzünü temel alır. 84

85 LayoutManager Arayüz Tipi public interface LayoutManager { void layoutcontainer(container parent); Dimension minimumlayoutsize(container parent); Dimension preferredlayoutsize(container parent); void addlayoutcomponent(string name, Component comp); void removelayoutcomponent(component comp); Ch5/layout/FormLayout.java Ch5/layout/FormLayoutTester.java Not: Aynı etkinin oluşturulması için GridBagLayout kullanılabilir. 85

86 FormLayout.java (1) import java.awt.*; /** A layout manager that lays out components along a central axis */ public class FormLayout implements LayoutManager { public Dimension preferredlayoutsize(container parent) { Component[] components = parent.getcomponents(); left = 0; right = 0; height = 0; for (int i = 0; i < components.length; i += 2) { Component cleft = components[i]; Component cright = components[i + 1]; Dimension dleft = cleft.getpreferredsize(); Dimension dright = cright.getpreferredsize(); left = Math.max(left, dleft.width); right = Math.max(right, dright.width); height = height + Math.max(dleft.height, dright.height); return new Dimension(left + GAP + right, height); public Dimension minimumlayoutsize(container parent) { return preferredlayoutsize(parent);.. 86

87 FormLayout.java (2) public void layoutcontainer(container parent) { preferredlayoutsize(parent); // Sets left, right Component[] components = parent.getcomponents(); Insets insets = parent.getinsets(); int xcenter = insets.left + left; int y = insets.top; for (int i = 0; i < components.length; i += 2) { Component cleft = components[i]; Component cright = components[i + 1]; Dimension dleft = cleft.getpreferredsize(); Dimension dright = cright.getpreferredsize(); int height = Math.max(dleft.height, dright.height); cleft.setbounds(xcenter - dleft.width, y + (height - dleft.height) / 2, dleft.width, dleft.height); cright.setbounds(xcenter + GAP, y + (height - dright.height) / 2, dright.width, dright.height); y += height; public void addlayoutcomponent(string name, Component comp) { public void removelayoutcomponent(component comp) { private int left; private int right; private int height; private static final int GAP = 6; 87

88 Strateji (Strategy) Modeli Pluggable strategy for layout management Layout manager object responsible for executing concrete strategy Generalizes to Strategy Design Pattern Other manifestation: Comparators Comparator<Country> comp = new CountryComparatorByName(); Collections.sort(countries, comp); 88

89 Strateji (Strategy) Modeli Özet 1. Sınıflar bir algoritmanın değişik biçimlerini kullanabilirler. 2. Kullanıcılar bazen standart algoritmaları özel versiyonlarıyla değiştirmek isteyebilirler. Çözüm 1. Algoritmanın genel hali için bir arayüz tipi tanımlanır. 2. Kulanılan strateji sınıfları bu arayüz tipini tanırlar. 3. Kullanıcılar strateji objelerini sağlayabilirler. 4. Algoritmanın çalıştırılması gerektiği zaman Context sınıfı strateji nesnesinin kendine özel metotlarını çağırır. 89

90 Strateji (Strategy) Modeli 90

91 Strateji (Strategy) Modeli Dizayn Modelindeki İsim Context Strategy ConcreteStrategy dowork() Yapıkalıbı Yönetimindeki İsim Container LayoutManager a layout manager such as BorderLayout a method such as layoutcontainer 91

92 Strateji (Strategy) Modeli: Sıralama Dizayn Modelindeki İsim Context Strategy ConcreteStrategy Sorting Algoritmasında kullanılan İsim Collections Comparator a class that implements Comparator 92

93 1. Model olarak Döngüler (Iterator) 2. Model Konsepti 3. Gözleyici (Observer) Modeli 4. Yapımodeli Yöneticileri (Layout Managers) ve Strateji (STRATEGY) Modeli 5. Bileşenler, Taşıyıcılar, ve Bileşik (COMPOSITE) Modeli 6. Kaydırma Çubukları ve Dekoratör (DECORATOR) Modeli 7. Modelleri Nasıl Anlayabiliriz? 8. Modelleri işlevsel hale Getirme 93

94 Taşıyıcılar ve Bileşenler Taşıyıcılar GUI bileşenlerini taşırlar. Bazen bir taşıyıcı içine başka bir taşıyıcı eklenmek istenebilir. Taşıyıcı da bir Bileşen olmak zorundadır. Bileşik (Composite) Dizayn Modeli Bileşik metodu doğrudan bileşen metotlarını çağırır. Örneğin: Container.getPreferredSize metodu, bileşenlerin getpreferredsize metodundan gelir. 94

95 Bileşik Modeli Özet 1. Asıl nesneler bileşik nesnelere bağlı olmalıdır. 2. Kullanıcılar, bileşik nesneyi asıl nesne gibi görebilirler. Çözüm 1. Asıl nesnelerin temeli olacak bir arayüz tipi tanımlanır. 2. Bileşik nesne asıl nesneleri içerir. 3. Bileşik ve asıl nesnelerin sınıfları aynı arayüzden oluşturulmuştur. 4. Arayüzdeki bir metodu oluştururken bileşik sınıf bu metodu kendi asıl nesnelerine uygular ve sonuçlarını birleştirir. 95

96 Bileşik Modeli 96

97 Bileşik Modeli Dizayn Modelindeki İsim Primitive Composite Leaf method() AWT bileşenlerinde kullanılan İsim Component Container a component without children (e.g. JButton) a method of Component (e.g.getpreferredsize) 97

98 1. Model olarak Döngüler (Iterator) 2. Model Konsepti 3. Gözleyici (Observer) Modeli 4. Yapımodeli Yöneticileri (Layout Managers) ve Strateji (STRATEGY) Modeli 5. Bileşenler, Taşıyıcılar, ve Bileşik (COMPOSITE) Modeli 6. Kaydırma Çubukları ve Dekoratör (DECORATOR) Modeli 7. Modelleri Nasıl Anlayabiliriz? 8. Modelleri işlevsel hale Getirme 98

99 Kaydırma Çubukları (Scroll Bars) Kadırma Çubukları bileşenlere eklenebilir. Yaklaşım #1: Component sınıfı kaydırma çubuklarını aktif hale getirebilir. Yaklaşım #2: Kaydırma Çubukları bileşeni çevreleyebilir. JScrollPane pane = new JScrollPane(component); Swing Yaklaşım #2 yi kullanır. JScrollPane de bir bileşendir. 99

100 Kaydırma Çubukları (Scroll Bars) 100

101 Dekoratör (Decorator) Modeli Özet 1. Bileşen nesneler dekore edilebilir. (görsel veya davranış olarak geliştirilebilir.) 2. Dekore edilmiş nesne dekore edilmemiş bir nesne ile aynı şekilde kullanılır. 3. Bileşen sınıfı dekorasyonun sorumluluğunu üstlenmez. 4. Mümkün olan dekorasyonların sonu olmayabilir. Çözüm 1. Bileşenin temelini oluşturacak bir arayüz tanımlanır. 2. Asıl bileşen sınıfları bu arayüzden oluşturulur. 3. Dekoratör sınıfları da bu arayüzden oluşturulur. 4. Bir dekoratör nesnesi dekore ettiği bileşeni kontrol eder. 5. Bileşenin arayüzünden bir metot oluşturulurken dekoratör sınıfı bu metodu dekore edilmiş bileşene uygular ve sonuçlarını dekorasyonun etkileriyle birleştirir. 101

102 Dekoratör (Decorator) Modeli 102

103 Dekoratör (Decorator) Modeli: Kaydırma Çubukları Dizayn Modelindeki İsim Component ConcreteComponent Decorator method() Kaydırma Çubuklarında kullanılan İsim Component JTextArea JScrollPane a method of Component (e.g. paint) 103

104 Akımlar (Streams) InputStreamReader reader = new InputStreamReader(System.in); BufferedReader console = new BufferedReader(reader); BufferedReader bir Reader alır ve tampona ekler. Sonuç başka bir Reader dır: Dekoratör Modeli Akım kütüphanesinde daha birçok dekoratör vardır, Örn: PrintWriter 104

105 Dekoratör (Decorator) Modeli: Giriş Akımları Dizayn Modelindeki İsim Component ConcreteComponent Decorator method() Giriş Akımlarındaki (input streams) isim Reader InputStreamReader BufferedReader read 105

106 1. Model olarak Döngüler (Iterator) 2. Model Konsepti 3. Gözleyici (Observer) Modeli 4. Yapımodeli Yöneticileri (Layout Managers) ve Strateji (STRATEGY) Modeli 5. Bileşenler, Taşıyıcılar, ve Bileşik (COMPOSITE) Modeli 6. Kaydırma Çubukları ve Dekoratör (DECORATOR) Modeli 7. Modelleri Nasıl Tanıyabiliriz? 8. Modelleri işlevsel hale Getirme 106

107 Modelleri Tanıma Modelin amacına bakalım Örn. COMPOSITE; DECORATOR den farklı bir amaca sahiptir. Kullanımları hatırlarsak: e.g. Yapıkalıpları için STRATEGY Stratejik olan herşey STRATEGY modeline bir örnek değildir. Özet ve çözüm turnusol kağıdı gibi kullanılabilir. 107

108 Turnusol Kağıdı Testi Swing bileşenine bir Border (sınır) ekleyelim. Border b = new EtchedBorder(); component.setborder(b); Şüphesiz ki bir dekorasyondur. DECORATOR ün bir örneği olabilir mi? 108

109 Turnusol Kağıdı Testi 1. Bileşen nesneler dekore edilebilir. GEÇTİ 2. Dekore edilmiş nesne dekore edilmeyenle aynı şekilde kullanılabilir. GEÇTİ 3. Bileşen sınıfı dekorasyonun sorumluluğunu üstlenmez. KALDI Bileşen sınıfı setborder metoduna sahip. 4. Mümkün olan dekorasyonların sonu olmayabilir. 109

110 1. Model olarak Döngüler (Iterator) 2. Model Konsepti 3. Gözleyici (Observer) Modeli 4. Yapımodeli Yöneticileri (Layout Managers) ve Strateji (STRATEGY) Modeli 5. Bileşenler, Taşıyıcılar, ve Bileşik (COMPOSITE) Modeli 6. Kaydırma Çubukları ve Dekoratör (DECORATOR) Modeli 7. Modelleri Nasıl Tanıyabiliriz? 8. Modelleri işlevsel hale Getirme 110

111 Modelleri işlevsel hale Getirme Fatura line items (Çizgi parçaları) içerir. Çizgi parçasının bir tanımı vardır, ücret Arayüz tipi: LineItem: Ch5/invoice/LineItem.java Ürünün asıl sınıfı bu arayüzden oluşturulmuştur: Ch5/invoice/Product.java 111

112 LineItem.java ve Product.java /** A line item in an invoice. /** A product with a price and description. */ public interface LineItem { /**Gets the price of this line the price */ double getprice(); /** Gets the description of this line the description */ String tostring(); */ public class Product implements LineItem { /**Constructs a description the price the price */ public Product(String description, double price) { this.description = description; this.price = price; public double getprice() { return price; public String tostring() { return description; private String description; private double price; 112

113 Desteler (Bundles) Deste (Bundle) = tanım+ücretle alakalı parçaların kümesi Örn. Radyo Kasetçalar, CD Player+Hoparlörler Bir deste çizgi parçalarına sahiptir. Deste de bir çizgi parçasıdır. COMPOSITE (Bileşik) Modeli Ch5/invoice/Bundle.java (getprice metoduna bakınız.) 113

114 Bundle.java import java.util.*; // A bundle of line items that is again a line item. public class Bundle implements LineItem { // Constructs a bundle with no items. public Bundle() { items = new ArrayList<LineItem>(); /** Adds an item to the item the item to add */ public void add(lineitem item) { items.add(item); public double getprice() { double price = 0; for (LineItem item : items) price += item.getprice(); return price; public String tostring() { String description = "Bundle: "; for (int i = 0; i < items.size(); i++) { if (i > 0) description += ", "; description += items.get(i).tostring(); return description; private ArrayList<LineItem> items; 114

115 Desteler (Bundles) 115

116 İskonto Parçalar (Discounted Items) Mağaza bir mal için iskonto verebilir. İskonto parça da bir parçadır. DECORATOR modeli Ch5/invoice/DiscountedItem.java (getprice metoduna bakınız.) Alternatif dizayn: LineItem sınıfına iskonto eklenebilir. 116

117 DiscountedItem.java /** A decorator for an item that applies a discount. */ public class DiscountedItem implements LineItem { /**Constructs a discounted item the item to be discount the discount percentage */ public DiscountedItem(LineItem item, double discount) { this.item = item; this.discount = discount; public double getprice() { return item.getprice() * (1 - discount / 100); public String tostring() { return item.tostring() + " (Discount " + discount + "%)"; private LineItem item; private double discount; 117

118 İskonto Parçalar (Discounted Items) 118

119 Model/Görünüm Ayırımı GUI faturaya parça eklemek için komutlara sahiptir. GUI faturayı görüntüler. Ekrandan girdiyi alır. Ekranın fatura değiştirildiğinde haberdar edimesi gerekir. Ekran hangi komutun faturayı değiştirdiğinden haberi yoktur. OBSERVER (Gözleyici) Modeli 119

120 Değişiklik Dinleyicileri (Change Listeners) Standart ChangeListener arayüzünü kullanalım: public interface ChangeListener { void statechanged(changeevent event); Invoice değişiklik dinleyicilerinin ArrayList ini alır. Fatura değiştiğinde tüm dinleyicileri uyarır: ChangeEvent event = new ChangeEvent(this); for (ChangeListener listener : listeners) listener.statechanged(event); 120

121 Değişiklik Dinleyicileri (Change Listeners) Ekran kendisini faturaya bir değişiklik dinleyici olarak ekler. Ekran kendisini fatura nesnesi durum değiştirdiği zaman günceller. final Invoice invoice = new Invoice(); final JTextArea textarea = new JTextArea(20, 40); ChangeListener listener = new ChangeListener() { public void statechanged(changeevent event) { textarea.settext(...); ; 121

122 Faturanın Gözetlenmesi 122

123 Faturalar arasında Döngü Fatura çizgi parçalarını içerir. Kullanıcıların çizgi parçaları üzerinde döngü oluşturmaları gerekir. ArrayList görmezler. Bu değişebilir. (Örn. Faturalar bir veritabanında saklanacaksa) ITERATOR (Döngü) Modeli 123

124 Döngüler Standart Iterator arayüzünü kullanalım: public interface Iterator<LineItem> { boolean hasnext(); LineItem next(); void remove(); remove opsiyonel bir metottur. (bak.: ch. 8) UnsupportedException atar. İç çalışmaları basamak basamak gösterebilmek için hasnext/next oluşturur. Ch5/invoice/Invoice.java 124

125 Invoice.java (1) import java.util.*; import javax.swing.event.*; // An invoice for a sale, consisting of line items. public class Invoice { // Constructs a blank invoice. public Invoice() { items = new ArrayList<LineItem>(); listeners = new ArrayList<ChangeListener>(); /** Adds an item to the item the item to add */ public void additem(lineitem item) { items.add(item); // Notify all observers of the change to the invoice ChangeEvent event = new ChangeEvent(this); for (ChangeListener listener : listeners) listener.statechanged(event); /** Adds a change listener to the listener the change listener to add */ public void addchangelistener(changelistener listener) { listeners.add(listener);. 125

126 Invoice.java (2) /** Gets an iterator that iterates through the an iterator for the items */ public Iterator<LineItem> getitems() { return new Iterator<LineItem>() { public boolean hasnext() { return current < items.size(); public LineItem next() { return items.get(current++); public void remove() { throw new UnsupportedOperationException(); private int current = 0; ; public String format(invoiceformatter formatter) { String r = formatter.formatheader(); Iterator<LineItem>iter = getitems(); while (iter.hasnext()) r += formatter.formatlineitem(iter.next()); return r + formatter.formatfooter(); private ArrayList<LineItem> items; private ArrayList<ChangeListener> listeners; 126

127 Döngüler 127

128 Faturaları düzenleme Basit Format: Yazı Alanı (Text Area) içine yerleştirme. Yeterince iyi olmayabilir, Örn. Browser içinde görüntülenmek için HTML tag leri Birden fazla formatlama algoritmasına gerek duyulabilir. STRATEGY Modeli 128

129 InvoiceFormatter.java /** This interface describes the tasks that an invoice formatter needs to carry out. */ public interface InvoiceFormatter { /**Formats the header of the the invoice header */ String formatheader(); /** Formats a line item of the the formatted line item */ String formatlineitem(lineitem item); /** Formats the footer of the the invoice footer */ String formatfooter(); 129

130 SimpleFormatter.java /** A simple invoice formatter. */ public class SimpleFormatter implements InvoiceFormatter { public String formatheader() { total = 0; return " I N V O I C E\n\n\n"; public String formatlineitem(lineitem item) { total += item.getprice(); return (String.format( "%s: $%.2f\n",item.toString(),item.getPrice())); public String formatfooter() { return (String.format("\n\nTOTAL DUE: $%.2f\n", total)); private double total; 130

131 InvoiceTester.java (1) import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; // A program that tests the invoice classes. public class InvoiceTester { public static void main(string[] args) { final Invoice invoice = new Invoice(); final InvoiceFormatter formatter = new SimpleFormatter(); // This text area will contain the formatted invoice final JTextArea textarea = new JTextArea(20, 40); // When the invoice changes, update the text area ChangeListener listener = new ChangeListener() { public void statechanged(changeevent event) { textarea.settext(invoice.format(formatter)); ; invoice.addchangelistener(listener); // Add line items to a combo box final JComboBox combo = new JComboBox(); Product hammer = new Product("Hammer", 19.95); Product nails = new Product("Assorted nails", 9.95); combo.additem(hammer); Bundle bundle = new Bundle(); bundle.add(hammer); bundle.add(nails); combo.additem(new DiscountedItem(bundle, 10)); 131

132 InvoiceTester.java // Make a button for adding the currently selected // item to the invoice JButton addbutton = new JButton("Add"); addbutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent event) { LineItem item = (LineItem) combo.getselecteditem(); ); invoice.additem(item); // Put the combo box and the add button into a panel JPanel panel = new JPanel(); panel.add(combo); panel.add(addbutton); // Add the text area and panel to the content pane JFrame frame = new JFrame(); frame.add(new JScrollPane(textArea), BorderLayout.CENTER); frame.add(panel, BorderLayout.SOUTH); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.pack(); frame.setvisible(true); 132

133 Faturaları düzenleme 133

134 Faturaları düzenleme 134

135 Kaynaklar Bu ders Object Oriented Design and Patterns kitabı kaynak alınarak düzenlenmiştir [1]. Çeşitli kaynaklardan aldığım bazı slaytlarda yer almıştır. Bunlar aşağıda listelenmiştir: Ana Kaynaklar: 1. Object Oriented Design and Patterns (OODP), 2nd Edition, Cay Horstmann, John Wiley, ISBN: ,

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 12: Grafik Kullanıcı Arayüzü (Graphical User Interface-GUI)

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 12: Grafik Kullanıcı Arayüzü (Graphical User Interface-GUI) MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 12: Grafik Kullanıcı Arayüzü (Graphical User Interface-GUI) Yard. Doç. Dr. Alper Kürşat Uysal Bilgisayar Mühendisliği Bölümü akuysal@anadolu.edu.tr Ders Web

Detaylı

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 18: Formatlı Grafik Kullanıcı Arayüzü Oluşturma

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 18: Formatlı Grafik Kullanıcı Arayüzü Oluşturma MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 18: Formatlı Grafik Kullanıcı Arayüzü Oluşturma Yard. Doç. Dr. Alper Kürşat Uysal Bilgisayar Mühendisliği Bölümü akuysal@anadolu.edu.tr Ders Web Sayfası: http://ceng.anadolu.edu.tr/ders.aspx?dersid=107

Detaylı

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Java ile Nesneye Yönelik Programlama (Object Oriented Programming) Java ile Nesneye Yönelik Programlama (Object Oriented Programming) Giriş Yrd. Doç. Dr. Aybars UĞUR Örnek 1 Bir Yolcu sınıfı, yolcu1 nesnesi oluşturulması ve kullanılması class Yolcu String ad; String soyad;

Detaylı

YZM311 YAZILIM YAPIMI BÖLÜM 4 TASARIM KALIPLARI. Yrd. Doç. Dr. Volkan TUNALI Mühendislik ve Doğa Bilimleri Fakültesi / Maltepe Üniversitesi

YZM311 YAZILIM YAPIMI BÖLÜM 4 TASARIM KALIPLARI. Yrd. Doç. Dr. Volkan TUNALI Mühendislik ve Doğa Bilimleri Fakültesi / Maltepe Üniversitesi YZM311 YAZILIM YAPIMI BÖLÜM 4 TASARIM KALIPLARI Yrd. Doç. Dr. Volkan TUNALI Mühendislik ve Doğa Bilimleri Fakültesi / Maltepe Üniversitesi Giriş 2 Tasarım Kalıpları (Design Patterns) Yaratımsal (Creational)

Detaylı

Görsel Programlama DERS 07. Görsel Programlama - Ders07/ 1

Görsel Programlama DERS 07. Görsel Programlama - Ders07/ 1 Görsel Programlama DERS 07 Görsel Programlama - Ders07/ 1 KULLANICI ARAYÜZÜ GELİŞTİRME Kullanıcı arayüzleri (GUI-Graphical User Interface) kullanıcının işletim sisteminin pencere yöneticisinde görebildiği,

Detaylı

İçindekiler. Okuma lisansı info acar, için verilmiştir. Çoğaltılması ve dağıtılması yasaktır.

İçindekiler. Okuma lisansı info acar, için verilmiştir. Çoğaltılması ve dağıtılması yasaktır. 18 İçindekiler Lütfen Dikkatle Okuyunuz! Yasal Uyarı Bölüm Başlıkları Önsöz Kitabın İçeriği Nedir? Kitabın İçeriği Ne Degildir? Kitap Kim İçin Yazıldı? Yazar Hakkında Kitap Nasıl Okunmalı? Yazar İle İletişim

Detaylı

MOBİL UYGULAMA GELİŞTİRME

MOBİL UYGULAMA GELİŞTİRME MOBİL UYGULAMA GELİŞTİRME Hedefler Bu üniteyi çalıştıktan sonra; Java programlama dilinde görsel arayüz tasarımı yapabilir, Java programlama dilinde görsel bileşenler üzerinde olay tanımlayabilir. Android

Detaylı

MVP, Observer ve Mediator Örüntüleri ile Yeniden Kullanılabilir Uygulama Bileşenleri Geliştirme

MVP, Observer ve Mediator Örüntüleri ile Yeniden Kullanılabilir Uygulama Bileşenleri Geliştirme MVP, Observer ve Mediator Örüntüleri ile Yeniden Kullanılabilir Uygulama Bileşenleri Geliştirme Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi

Detaylı

Java da. ve AWT ve SWING Kütüphaneleri. BBS-515 Nesneye Yönelik Programlama. Ders #8 (9 Aralık 2009)

Java da. ve AWT ve SWING Kütüphaneleri. BBS-515 Nesneye Yönelik Programlama. Ders #8 (9 Aralık 2009) Java da Applet ler ler (...devam) ve AWT ve SWING Kütüphaneleri BBS-515 Nesneye Yönelik Programlama Ders #8 (9 Aralık 2009) İçerikç Geçen ders: Java da İstemci Tarafı Uygulamalar ( Applets ) Örnekler Bu

Detaylı

.com. Özcan Acar 2009 Kurumsal Java.com

.com. Özcan Acar 2009 Kurumsal Java.com .com Spring MVC Özcan Acar acar@unitedinter.net http://www.ozcanacar.com http://www.kurumsaljava.com Özcan Acar Hakkında public class OezcanAcar { public static void main(string[] args) { Acar oezcan =

Detaylı

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır. Ders İçeriği An introduction to Object-oriented programming with Java Third Edition Update Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır. Nesneye Yönelik Öğr.

Detaylı

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1 Görsel Programlama DERS 03 Görsel Programlama - Ders03/ 1 Java Dili, Veri Tipleri ve Operatörleri İlkel(primitive) Veri Tipleri İLKEL TİP boolean byte short int long float double char void BOYUTU 1 bit

Detaylı

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism ) Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism ) BBS-515 Nesneye Yönelik Programlama Ders #9 (16 Aralık 2009) Geçen ders: Java Applet lerde bileşen yerleştirme türleri ( applet layouts

Detaylı

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız. 1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız. [10 puan] int param = 30; int result = 300; if (param > 45) result

Detaylı

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır. Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır. Örneğin; bir öğrenci, sıra, çember, bir buton birer nesnedir. Bir

Detaylı

JComponent in alt sınıfları

JComponent in alt sınıfları JAVA SWING Javax.Swing paketi Java Foundation Classes (JFC) kütüphanesi içindedir. 134 sınıfı olan, 25 arayüz kılgılayan büyük bir pakettir. Java.AWT (Java Abstract Window Toolkit) paketinin üzerine kuruludur

Detaylı

Görsel Programlama DERS 08. Görsel Programlama - Ders08/ 1

Görsel Programlama DERS 08. Görsel Programlama - Ders08/ 1 Görsel Programlama DERS 08 Görsel Programlama - Ders08/ 1 Java da Olay Yönetimi (Event Handling) Program çalışırken kullanıcı tarafından gerçekleştirilen tüm hareketlere olay(event) denilir. Kullanıcının

Detaylı

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR KUYRUKLAR QUEUES Doç. Dr. Aybars UĞUR Giriş Bu bölümde gerçek yaşamdaki kuyrukların bilgisayardaki gösterimleri üzerinde durulacaktır. Kuyruklar, eleman eklemelerin sondan (rear) ve eleman çıkarmaların

Detaylı

Client Server Database

Client Server Database Java Server Faces Ahmet Demirelli Sabancı Üniversitesi 2007 Ajanda Model-1 Mimari Model-2 Mimari MVC Framework Java Server Faces Örnek Uygulama Model 1 Mimari 1 2 3 6 JSP (View) 5 JavaBeans (Model) 4 Client

Detaylı

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator Interface Comparator java.util Interface Comparator Kılgılayan sınıf: Collator Bildirimi: public interface Comparator Comparator arayüzü Java Collections Framework un bir üyesidir. Bir nesneler koleksiyonu

Detaylı

MVP ve Mediator ile Loose Coupled, Modüler UI Geliştirme

MVP ve Mediator ile Loose Coupled, Modüler UI Geliştirme MVP ve Mediator ile Loose Coupled, Modüler UI Geliştirme Hakkımızda Kenan Sevindik, 1999 ODTÜ mezunu 15 yıllık kurumsal uygulama geliştirme tecrübesine sahip Uzmanlık ve ilgi alanları Kurumsal uygulama

Detaylı

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı Öğr. Gör. Cansu AYVAZ GÜVEN NESNE TABANLI PROGRAMLAMA Java - AWT JAVA AWT AWT Abstract Windowing Toolkit (Soyut Pencereleme Araçtakımı)

Detaylı

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

Facade (Cephe) Tasarım Şablonu KurumsalJava.com Facade (Cephe) Tasarım Şablonu KurumsalJava.com Özcan Acar Bilgisayar Mühendisi http://www.ozcanacar.com Profesyonel yazılım sistemleri birçok komponentin birleşiminden oluşur. Yazılım esnasında bir çok

Detaylı

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

Chain of Responsibility Tasarım Şablonu KurumsalJava.com Chain of Responsibility Tasarım Şablonu KurumsalJava.com Özcan Acar Bilgisayar Mühendisi http://www.ozcanacar.com Chain of responsibility sorumluluk zinciri anlamına gelmektedir. Sisteme gönderilen bir

Detaylı

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü:

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü: Bölüm 24 Java Ağ Uygulamaları 24.1 Java Appletleri Applet, Web tarayıcısında çalışan bir Java programıdır. Bir applet, Java uygulaması için tamamen fonskiyonel olabilir çünkü bütün Java API ye sahiptir.

Detaylı

Veri Yapıları ve Algoritmalar 2006-2007 2.dönem

Veri Yapıları ve Algoritmalar 2006-2007 2.dönem Veri Yapıları ve Algoritmalar 2006-2007 2.dönem Öğretim Elemanları: Dr. A. Şima Etaner-Uyar Dr. Gülşen Cebiroğlu-Eryiğit Dersle ilgili bilgiler Ders Kitabı Data Structures and Algorithms in Java, 4th Ed.,

Detaylı

MVC, MVP ve Mediator ile TDD Tecrübeleri. Kenan SEVİNDİK

MVC, MVP ve Mediator ile TDD Tecrübeleri. Kenan SEVİNDİK MVC, MVP ve Mediator ile TDD Tecrübeleri Kenan SEVİNDİK Mimarisel Bir Örüntü: MVC Controller Veri değişiklikleri Kullanıcı girdileri ve UI olayları Bildirimler Model View Veri erişimi MVC'nin Amacı Trygve

Detaylı

HESAP MAKİNASI YAPIMI

HESAP MAKİNASI YAPIMI HESAP MAKİNASI YAPIMI 1..Aşağıdakine benzer görünüm ve butonları hazırlayın. 2. 24. Butonun içerisine aşağıdaki kodları yazın. 3. Yeni bir layer ekleyip Frame1 F9 na aşağıdaki kodları ekleyelim. 4. Butonlardan

Detaylı

.com. Kurumsal Java. Özcan Acar 2009. com

.com. Kurumsal Java. Özcan Acar 2009. com . urumsal J Java ile Yüksek Performanslı Web Platformları Özcan Acar acar@unitedinter.net http://www.ozcanacar. http://www.kurumsalj urumsal Özcan Acar Hakkında public class OezcanAcar { public static

Detaylı

Burak Kıymaz 13.10.2015 JAVA FX

Burak Kıymaz 13.10.2015 JAVA FX JavaFx neden çıktı? JAVA FX Eskiden desktop için swing kullanılırdı fakat pek iyi değildi. Javafx bu konuda css kullanmaya da izin verdiği için daha iyi bulundu. xml veriyi biçimlendirmek için kullanılan

Detaylı

MOBİL UYGULAMA GELİŞTİRME

MOBİL UYGULAMA GELİŞTİRME MOBİL UYGULAMA GELİŞTİRME Hedefler Bu üniteyi çalıştıktan sonra; Layout çeşitlerinin ve aralarındaki farkları açıklayabilir, Android projesinde farklı Laoyut kullanabilir, Android projesinde TextView,

Detaylı

YZM 2108 Yazılım Mimarisi ve Tasarımı

YZM 2108 Yazılım Mimarisi ve Tasarımı YZM 2108 Yazılım Mimarisi ve Tasarımı Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 3 Tasarım Kalıpları Bu bölümde; Anti-Patternler

Detaylı

Virtualmin'e Yeni Web Sitesi Host Etmek - Domain Eklemek

Virtualmin'e Yeni Web Sitesi Host Etmek - Domain Eklemek Yeni bir web sitesi tanımlamak, FTP ve Email ayarlarını ayarlamak için yapılması gerekenler Öncelikle Sol Menüden Create Virtual Server(Burdaki Virtual server ifadesi sizi yanıltmasın Reseller gibi düşünün

Detaylı

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 10. Yrd.Doç.Dr.Hacer Karacan

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 10. Yrd.Doç.Dr.Hacer Karacan NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 10 Yrd.Doç.Dr.Hacer Karacan İçerik Grafik Kullanıcı Arayüzü Uygulamaları AWT, Swing Arayüz Yerleşim Düzeni Temel GKA Bileşenleri Olay Yönetimi Olay Dinleyiciler Olay

Detaylı

public class SalesLineItem // Java { private int quantity; private ProductSpecification description; public Money getsubtotal() {...

public class SalesLineItem // Java { private int quantity; private ProductSpecification description; public Money getsubtotal() {... Kodlama Sınıf tanımları yazılım sınıflarının diyagramlarından yararlanılarak oluşturulur. Karmaşık veri tiplerine (örneğin sınıf) sahip üyeler referans ya da işaretçi olarak yaratılmalılar. Basit nitelik

Detaylı

Android Ders Notları

Android Ders Notları Android Ders Notları 1. Yeni Bir Proje Başlatma Android Studio programında yeni bir proje başlatıyoruz. İlk olarak karşımıza resim 1 deki gibi bir pencere gelecek. Burada Application name kısmına proje

Detaylı

Üst Düzey Programlama

Üst Düzey Programlama Üst Düzey Programlama Tasarım Şablonları Üst Düzey Programlama-ders03/ 1 Chain-Of-Responsibility ŞABLONU Bu şablon; bir dizi sınıfın, gönderilmiş olan isteğine yanıt vermesini sağlar. Bu nesneler farklı

Detaylı

Class LinkedHashMap. Class LinkedHashMap java.lang.object java.util.abstractmap java.util.hashmap java.util.linkedhashmap. Kılgıladığı arayüzler:

Class LinkedHashMap. Class LinkedHashMap java.lang.object java.util.abstractmap java.util.hashmap java.util.linkedhashmap. Kılgıladığı arayüzler: Class LinkedHashMap java.util Class LinkedHashMap java.lang.object java.util.abstractmap java.util.hashmap java.util.linkedhashmap Kılgıladığı arayüzler: Cloneable, Map, Serializable Bildirimi: public

Detaylı

Bölüm 6. Diziler (arrays) Temel kavramlar Tek boyutlu diziler Çok boyutlu diziler

Bölüm 6. Diziler (arrays) Temel kavramlar Tek boyutlu diziler Çok boyutlu diziler Bölüm 6 Diziler (arrays) Temel kavramlar Tek boyutlu diziler Çok boyutlu diziler Chapter 6 Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Genel Bakış Dizi: Hepsi aynı türde

Detaylı

ArrayList Uygulamaları

ArrayList Uygulamaları ArrayList Uygulamaları Aşağıdaki program önce boş bir ArrayList yaratıyor. Sonra sırasıyla şu işleri yapıyor: Listenin boş olup olmadığını yaz. Ambara üç tane öğe ekle. İndisi 2 olan yere bir öğe sokuştur.

Detaylı

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi Görsel Programlama Metot Yeniden Tanımlama, Metot Aşırı Yükleme, Dinamik Metot Yükleme, Soyut Sınıflar, Soyut Metotlar, Arayüzler, Çoklu Kalıtım, Anonim Sınıflar ve java.lang.object Sınıflar Programcı

Detaylı

Spring Framework Eğitimi

Spring Framework Eğitimi Hazırlayan: Barış Dere @BarisDere baris.dere@gmail.com Spring Framework Eğitimi Ders 2: Http://www.youtube.com/barisdere Ders içeriği Spring IoC container tanıtımı Spring IoC container çalışma şekli Metadata

Detaylı

YZM 2116 Veri Yapıları

YZM 2116 Veri Yapıları YZM 2116 Veri Yapıları Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği Bu bölümde, BÖLÜM - 5 Kuyruk VY ve ADT Basit Kuyruk (Simple Queue)

Detaylı

ORNEK 1: Tarım Makinaları ve Teknolojileri Mühendisliği başlıklı çerçeve üretme.

ORNEK 1: Tarım Makinaları ve Teknolojileri Mühendisliği başlıklı çerçeve üretme. ORNEK 1: Tarım Makinaları ve Teknolojileri Mühendisliği başlıklı çerçeve üretme. YERLEŞİM PLANI DÜZENLEYİCİLERİ (LAYOUT MANAGERS) Bir çerçeve veya pano içerisine bileşenler (butonlar, checkboxlar, vs )

Detaylı

MOBİL UYGULAMA GELİŞTİRME

MOBİL UYGULAMA GELİŞTİRME MOBİL UYGULAMA GELİŞTİRME Hedefler Bu üniteyi çalıştıktan sonra; BaseAdapter yapısından miras alabilir, ListView bileşenine özel layout ve adapter oluşturabilir, WebView bileşenini kullanarak web sayfalarını

Detaylı

Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals

Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals 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

Detaylı

Cahit GÜNGÖR Hacettepe Üniversitesi Bilişim Enstitüsü. Sorumluluk Zinciri. Kod Üretme (Code Generation)

Cahit GÜNGÖR Hacettepe Üniversitesi Bilişim Enstitüsü. Sorumluluk Zinciri. Kod Üretme (Code Generation) Cahit GÜNGÖR Hacettepe Üniversitesi Bilişim Enstitüsü Sorumluluk Zinciri (Chain of Responsibility) Yazılım Mimarileri Kod Üretme (Code Generation) Anahatlar Tanım Örüntünün Amacı Ne zaman Gerçekleştiririz?

Detaylı

Decorator Tasarım Şablonu

Decorator Tasarım Şablonu Decorator Tasarım Şablonu KurumsalJava.com Özcan Acar Bilgisayar Mühendisi http://www.ozcanacar.com http://www.javadergisi.com Mevcut bir sınıf hiyerarşisini ya da sınıfın yapısını değiştirmeden, oluşturulan

Detaylı

Đlgili konular: Collection, Set, HashSet, Comparable, Comparator, TreeMap, Collections.synchronizedSortedSet(SortedSet), Serialized Form

Đlgili konular: Collection, Set, HashSet, Comparable, Comparator, TreeMap, Collections.synchronizedSortedSet(SortedSet), Serialized Form Class TreeSet java.util Class TreeSet java.lang.object java.util.abstractcollection java.util.abstractset java.util.treeset Kılgıladığı arayüzler: Cloneable, Collection, Serializable, Set, SortedSet Bildirimi:

Detaylı

Java Programlama Dilinde Veri Tipleri. Yrd. Doç. Dr. Aybars UĞUR

Java Programlama Dilinde Veri Tipleri. Yrd. Doç. Dr. Aybars UĞUR Java Programlama Dilinde Veri Tipleri Yrd. Doç. Dr. Aybars UĞUR Metoda Temel Veri Tipi Gönderme Java daki 8 Temel veri tipi (boolean, char, byte, short, int, long, float, double). public class OrnekTemelTip

Detaylı

Kitapta UML diyagramları kullanılarak, tasarım şablonları görsel olarak açıklanmıştır. İçerik aşağıdaki bölümlerden oluşmaktadır:

Kitapta UML diyagramları kullanılarak, tasarım şablonları görsel olarak açıklanmıştır. İçerik aşağıdaki bölümlerden oluşmaktadır: 23 Önsöz Bu kitapta profesyonel yazılım için vazgeçilmez olan tasarım şablonlarını (design pa erns) tematize etmek istedim. Çalıştığım birçok projede görevim mevcut sistemlere yeni fonksiyonlar eklemekti.

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java Kodlarına Yorum Satırı Eklemek Java Paket Kavramı Java Kütüphane Kavramı Konsoldan Veri Çıkışı ve JOPtionPane Kütüphanesi JOptionPane Kütüphanesi Kullanarak

Detaylı

Şablon Türler (Generics)

Şablon Türler (Generics) Şablon Türler (Generics) CLR 1.0 da çalışma zamanında belli olmayan sınıfları kullanan esnek sınıf ve metotlar, Object sınıfı temel alınarak oluşturulması gerekmekteydi. CLR 2.0 dan itibaren Generic lerin

Detaylı

BİL-141 Bilgisayar Programlama I (Java)

BİL-141 Bilgisayar Programlama I (Java) 1 BİL-141 Bilgisayar Programlama I (Java) Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Not: Bu dersin sunumları, Java Bilgisayar Programlamaya Giriş, A. Yazıcı, E. Doğdu,

Detaylı

JavaFX Temelleri (1)

JavaFX Temelleri (1) JavaFX Temelleri (1) Sahne Çizelgesi (Scene Graph), Yerleşim Panoları (Layout Panes), Uygulama Soyut Sınıfı ve İskeleti, Uygulama Sahnesi (Application Scene), GUI Olayları (GUI Events), Olay İşleme (Event

Detaylı

Üst Düzey Programlama

Üst Düzey Programlama Üst Düzey Programlama Tasarım Şablonları Üst Düzey Programlama-ders01/ 1 Tasarım Şablonları (Design Patterns) Şablon bir işi yapmak için bir yoldur. Yemek yaparken kullanılan tariflerde birer şablondur.

Detaylı

İÇİNDEKİLER VII İÇİNDEKİLER

İÇİNDEKİLER VII İÇİNDEKİLER İÇİNDEKİLER VII İÇİNDEKİLER 1 JAVA 8 NEDİR? 1 Java Nasıl Çalışır? 3 HOTSPOT Teknolojisi Nedir? 5 Çöp Toplayıcı (GarbageCollector) Nedir? 5 Jar Nedir? 6 Java Geliştirme Ortamı 7 Açıklama Satırıları 8 Nesnel

Detaylı

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util.

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util. Class PriorityQueue java.util Class PriorityQueue java.lang.object java.util.abstractcollection java.util.abstractqueue java.util.priorityqueue Parametre tipleri: E - the type of elements held

Detaylı

Java EE web uygulamaları geliştirmek için kullanılan açık kaynak web uygulama framework üdür.

Java EE web uygulamaları geliştirmek için kullanılan açık kaynak web uygulama framework üdür. 1 Apache Struts Java EE web uygulamaları geliştirmek için kullanılan açık kaynak web uygulama framework üdür. Kullanıcılara MVC mimarisini benimsetmek için Java Servlet API sini kullanıyor. Model-View-Controller

Detaylı

JavaFX Temelleri (2)

JavaFX Temelleri (2) JavaFX Temelleri (2) Araç İpuçları (Tooltips), Yazı Tipleri (Fonts), Çalışma Ortamları ve Dağıtım Oluşturma, JavaFX Özellikleri (JavaFX Properties), Gözlenebilirlik (Observability), Bağlanımlar (Bindings)

Detaylı

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş Yard. Doç. Dr. Alper Kürşat Uysal Bilgisayar Mühendisliği Bölümü akuysal@anadolu.edu.tr Ders Web Sayfası: http://ceng.anadolu.edu.tr/ders.aspx?dersid=101

Detaylı

HB2001: JAVA PROGRAMLAMA (32 saat)

HB2001: JAVA PROGRAMLAMA (32 saat) Sayfa: 1 / 7 HB2001: JAVA PROGRAMLAMA (32 saat) Eğitimin Amacı Bu eğitim Java programlama dilinin özelliklerini öğretmeyi amaçlar. Java programlamaya girişle başlayan eğitim, object-oriented programming

Detaylı

Görsel Programlama (Visual Programming) 2.Hafta

Görsel Programlama (Visual Programming) 2.Hafta Görsel Programlama (Visual Programming) 2.Hafta 2016-2017 Bahar Dönemi Class Yapısı ve Form 1Muhammer İLKUÇAR, MAKÜ-2015 BURDUR Class - Obje Nesne (Nesne tabanlı programlama) İnsan ırkının ortak özelliklerini

Detaylı

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir; abstract Sınıflar 1 Özet sınıflar ya da özet metotlar abstract anahtar sözcüğü kullanılarak tanımlanırlar. Bir temel sınıf içinde bildirilen abstract metotların içeriği boştur. Kendisinden yeni bir instance

Detaylı

MOBİL UYGULAMA GELİŞTİRME

MOBİL UYGULAMA GELİŞTİRME MOBİL UYGULAMA GELİŞTİRME Hedefler Bu üniteyi çalıştıktan sonra; Android projesi oluşturabilir, Android projesini çalıştırabilir, Android projesi genel yapısını açıklayabilir, Activity kavramını açıklayabilir,

Detaylı

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ AD SOYAD: TESLİM TARİHİ: OKUL NO: TESLİM SÜRESİ: 2 hafta ÖDEV NO: 5 1- BANKA

Detaylı

BİL-142 Bilgisayar Programlama II

BİL-142 Bilgisayar Programlama II BİL-142 Bilgisayar Programlama II (C/C++) Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Konular Giriş Sınıflar, Nesneler, Fonksiyon ve Veri Üyeleri Sınıf ve Fonksiyon Üyeleri

Detaylı

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM 2014) //Class (Sınıf) // Sınıf (class) soyut veri tipidir. // Nesne (object) sınıfın somutlaşan bir cismidir. // static : nesnesi oluşturulmaz.

Detaylı

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1 Görsel Programlama DERS 02 Görsel Programlama - Ders02/ 1 Kodun Tekrar Kullanımı ve Kalıtım(Inheritance) Nesneye yönelik programlamanın diğer programlama paradigmalarına karşı bir avantajı kodun yeniden

Detaylı

Veritabanı İşlemleri

Veritabanı İşlemleri Veritabanı İşlemleri Bu bölümde; Veritabanı bağlantısı Komutların Yürütülmesi ADO.NET Nesne Modeli kavramları incelenecektir. ADO.NET (ActiveX Data Objects) ADO.NET, var olan Windows API lerinden çok daha

Detaylı

Business Delegate Tasarım Şablonu KurumsalJava.com

Business Delegate Tasarım Şablonu KurumsalJava.com Business Delegate Tasarım Şablonu KurumsalJava.com Özcan Acar Bilgisayar Mühendisi http://www.ozcanacar.com Modern yazılım sistemleri birden fazla katmandan oluşur. Bu katmanlar her zaman aynı server üzerinde

Detaylı

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü BM-209 Nesne Yönelimli Programlama Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü Java Programlama Dili Java bayt kodları Java Sanal Makineleri üzerinde

Detaylı

Haz. Yrd.Doç.Dr. Yunus Emre Selçuk

Haz. Yrd.Doç.Dr. Yunus Emre Selçuk NESNEYE DAYALI TASARIM VE MODELLEME KISIM 1: TASARIM KALIPLARI 1.3. 1 CHAIN OF RESPONSIBILITY: Amaç: Birbirleri ile ilişkili bir nesneler zinciri veya hiyerarşisindeki bir nesnenin, aldığı bir mesajı işleyemeyeceği

Detaylı

Temel JavaFX Bileşenleri (1) Labeled, Label, Button, ToggleButton, RadioButton, ToggleGroup, CheckBox, ComboBox, Slider, ListView ve SelectionModel

Temel JavaFX Bileşenleri (1) Labeled, Label, Button, ToggleButton, RadioButton, ToggleGroup, CheckBox, ComboBox, Slider, ListView ve SelectionModel Temel JavaFX Bileşenleri (1) Labeled, Label, Button, ToggleButton, RadioButton, ToggleGroup, CheckBox, ComboBox, Slider, ListView ve SelectionModel JavaFX Nodları javafx.scene.node: sahneye eklenebilen

Detaylı

CENG 217 nesne tabanlı dizayn. Doç. Dr. Halûk Gümüşkaya haluk@gumuskaya.com / haluk@fatih.edu.tr http://www.gumuskaya.com

CENG 217 nesne tabanlı dizayn. Doç. Dr. Halûk Gümüşkaya haluk@gumuskaya.com / haluk@fatih.edu.tr http://www.gumuskaya.com CENG 217 nesne tabanlı dizayn ders 2 Doç. Dr. Halûk Gümüşkaya haluk@gumuskaya.com / haluk@fatih.edu.tr http://www.gumuskaya.com Computing Engineering Department Fatih University Friday, December 02, 2005

Detaylı

Intercepting Filter Tasarım Şablonu KurumsalJava.com

Intercepting Filter Tasarım Şablonu KurumsalJava.com Intercepting Filter Tasarım Şablonu KurumsalJava.com Özcan Acar Bilgisayar Mühendisi http://www.ozcanacar.com Front Controller 1 tasarım şablonunda, kullanıcıdan gelen isteklerin (request) merkezi bir

Detaylı

Üst Düzey Programlama

Üst Düzey Programlama Üst Düzey Programlama JSP Üst Düzey Programlama-ders04/ 1 JSP JSP durağan HTML ile dinamik oluşturulan içeriği birleştirmeyi sağlar. Bir web sayfası tasarlama programı ile web sayfasını tasarlar daha sonra

Detaylı

BİL132 Bilgisayar Programlama II

BİL132 Bilgisayar Programlama II BİL132 Bilgisayar Programlama II 8. Olağandışı durumlar (exceptions) Hacettepe Üniversitesi Bilgisayar Mühendisliği Bölümü Yüksel Tarhan Olağandışı durum Kütük bulunamadı Diskte yer kalmadı Nesne referans

Detaylı

Tasarım Modelinin (Design Model) Oluşturulması

Tasarım Modelinin (Design Model) Oluşturulması 1 Tasarım Modelinin (Design Model) Oluşturulması Bu aşamada, nesneye dayalı yönteme göre problemin mantıksal çözümü oluşturulur. Tasarım modelinde yazılım sınıfları ve aralarındaki işbirliği (etkileşim)

Detaylı

I Java Veri Yapıları 1

I Java Veri Yapıları 1 İçindekiler Önsöz xix I Java Veri Yapıları 1 1 Giriş 3 1.1 Veri Nedir?............................... 3 1.2 Algoritma Nedir?............................ 4 1.3 Veri Yapıları..............................

Detaylı

TÜMLEŞİK MODELLEME DİLİ. UML (Unified Modeling Language)

TÜMLEŞİK MODELLEME DİLİ. UML (Unified Modeling Language) TÜMLEŞİK MODELLEME DİLİ UML (Unified Modeling Language) UML NEDİR? Yazılım ve donanımların bir arada düşünülmesi gereken, Zor ve karmaşık programların, Özellikle birden fazla yazılımcı tarafından kodlanacağı

Detaylı

8. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ. hakanyilmaz@karabuk.edu.tr

8. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ. hakanyilmaz@karabuk.edu.tr 8. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II Öğr.Gör. Hakan YILMAZ hakanyilmaz@karabuk.edu.tr Karabük Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 2 İçindekiler QUERYSTRING KOLEKSIYONU... 3 FORM

Detaylı

1 GİRİŞ 1 C# Hakkında Genel Bilgiler 1.Net Framework 1 CLR 2 CLR Ve CTS 2 Temel Sınıf Kütüphanesi 3 CIL 3 Algoritma Nedir? 4 Sözde Kod (Pseudocode) 5

1 GİRİŞ 1 C# Hakkında Genel Bilgiler 1.Net Framework 1 CLR 2 CLR Ve CTS 2 Temel Sınıf Kütüphanesi 3 CIL 3 Algoritma Nedir? 4 Sözde Kod (Pseudocode) 5 İÇİNDEKİLER IX İÇİNDEKİLER 1 GİRİŞ 1 C# Hakkında Genel Bilgiler 1.Net Framework 1 CLR 2 CLR Ve CTS 2 Temel Sınıf Kütüphanesi 3 CIL 3 Algoritma Nedir? 4 Sözde Kod (Pseudocode) 5 2 VISUAL STUDIO GELİŞTİRME

Detaylı

Özcan Acar 2010 Kurumsal Java Akademisi.com

Özcan Acar 2010 Kurumsal Java Akademisi.com Özcan Acar 2010 Kurumsal Java Akademisi.com Nasıl Uzman Yazılımcı Olunur? Özcan Acar acar@unitedinter.net http://www.ozcanacar.com http://www.kurumsaljava.com Özcan Acar Özcan 2010 Kurumsal Acar 2009 Java

Detaylı

Yığıtın en üstündeki öğeyi değer olarak alır; ama onu yığıttan almaz, yerinde bırakır.

Yığıtın en üstündeki öğeyi değer olarak alır; ama onu yığıttan almaz, yerinde bırakır. Stack Sınıfı (yığıt) java.util Class Stack java.lang.object java.util.abstractcollection java.util.abstractlist java.util.vector java.util.stack Stack (yığıt) sınıfı nesnelerin LIFO (last-input-first-output)

Detaylı

Seri kablo bağlantısında Windows95/98/ME'ten Windows 2000'e bağlantı Windows95/98/ME - NT4 bağlantısına çok benzer.

Seri kablo bağlantısında Windows95/98/ME'ten Windows 2000'e bağlantı Windows95/98/ME - NT4 bağlantısına çok benzer. Seri kablo bağlantısında Windows95/98/ME'ten Windows 2000'e bağlantı Windows95/98/ME NT4 bağlantısına çok benzer. Direkt Kablo desteğini Windows95/98'e yükledikten sonra, Windows95 for Direct Cable Client

Detaylı

JavaServerFaces. Ahmet Demirelli. SCJP 5.0, SCWCD 1.4 ahmetdemirelli@sabanciuniv.edu

JavaServerFaces. Ahmet Demirelli. SCJP 5.0, SCWCD 1.4 ahmetdemirelli@sabanciuniv.edu JavaServerFaces Ahmet Demirelli SCJP 5.0, SCWCD 1.4 ahmetdemirelli@sabanciuniv.edu Sabancı Üniversitesi Bilişim Teknolojileri Yüksek Lisans Programı Seminerleri 2008 Hakkımızda SabancıÜniversitesi BT Yüksek

Detaylı

Karabük Üniversitesi, Mühendislik Fakültesi...www.ibrahimcayiroglu.com WEB TEKNOLOJİLERİ

Karabük Üniversitesi, Mühendislik Fakültesi...www.ibrahimcayiroglu.com WEB TEKNOLOJİLERİ WEB TEKNOLOJİLERİ VISUAL STUDIO DA YENİ BİR PROJE OLUŞTURMA Visual Studio (VS) programını çalıştırdığımızda karşımıza boş bir ekran gelir. Yeni bir proje oluştururken File>New>Project yolu kullanılarak

Detaylı

Üst Düzey Programlama

Üst Düzey Programlama Üst Düzey Programlama Servlet Üst Düzey Programlama-ders01/ 1 Servlet Nedir? Web sayfaları ilk başlarda durağan bir yapıya sahipti ve kullanıcıdan bilgi alarak işlemler yapmıyordu. Zamanın geçmesiyle kullanıcıya

Detaylı

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır. Bölüm 20 20 Arayüzler Arayüz bir sınıf değildir. Arayüz yazmak sınf yazmaya çok benzer ancak ikisi birbirinden farklı konseptlerdir. Sınıf bir nesnenin özelliklerini ve davranışlarını belirtirken; bir

Detaylı

Java Programlama Giriş

Java Programlama Giriş Java Programlama Giriş 2013-2014 Bahar Dönemi Mehmet Akif Ersoy Üniversitesi Teknik Bilimler Meslek Yüksekokulu Burdur 2014 Muhammer İLKUÇAR 1 Neden Java Programlama Platformdan bağımsızdır

Detaylı

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler BMÜ-111 Algoritma ve Programlama Bölüm 5 Tek Boyutlu Diziler Yrd. Doç. Dr. İlhan AYDIN 1 Problem 100 adet sayı okumak istediğimizi düşünelim. Bu sayıların ortalaması hesaplanacak ve sayıların kaç tanesinin

Detaylı

Progress Barlı, FTP Dosya Upload Appleti

Progress Barlı, FTP Dosya Upload Appleti FTP ile dosya etmek kolay ancak bunu bir progressbar (yükleniyor barı) ile yapmak biraz karışık olabilir. Bir kaç java class yapısı kullanarak yazmak daha sonra bu klasları başka yerdede kullanabilmenize

Detaylı

Programlama Dillerinde Kullanılan Veri Tipleri

Programlama Dillerinde Kullanılan Veri Tipleri Programlama Dillerinde Kullanılan Veri Tipleri Taban/Biçim Basic Paskal C/C++/C#/Java 10 (Decimal ) - - - 16 (Hexadecimal) &hsayı veya &Hsayı $sayı 0xsayı veya 0Xsayı Üstel eüs veya Eüs eüs veya Eüs eüs

Detaylı

Java dili, aşağıdakiler de dahil olmak üzere çok çeşitli denetleyici türlerine sahiptir.

Java dili, aşağıdakiler de dahil olmak üzere çok çeşitli denetleyici türlerine sahiptir. PART 5 5. Denetleyici Türleri Java dili, aşağıdakiler de dahil olmak üzere çok çeşitli denetleyici türlerine sahiptir. Java Erişim Kontrol Denetleyicileri (Access Control Modifiers) Erişim Harici Denetleyiciler

Detaylı

IDENTITY MANAGEMENT FOR EXTERNAL USERS

IDENTITY MANAGEMENT FOR EXTERNAL USERS 1/11 Sürüm Numarası Değişiklik Tarihi Değişikliği Yapan Erman Ulusoy Açıklama İlk Sürüm IDENTITY MANAGEMENT FOR EXTERNAL USERS You can connect EXTERNAL Identity Management System (IDM) with https://selfservice.tai.com.tr/

Detaylı

Tasarım Örnekleri. Senaryoların Gerçeklenmesi (Use-Case Realization)

Tasarım Örnekleri. Senaryoların Gerçeklenmesi (Use-Case Realization) Senaryoların Gerçeklenmesi (Use-Case Realization) Bu bölümde; senaryoların birbirleriyle etkileşimde olan (işbirliği yapan) yazılım sınıfları ve nesneler şeklinde nasıl tasarlanacağı ele alınacaktır. Bu

Detaylı

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/ Ana Main Kodları /*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/ package javaapplication1; public class JavaApplication1 public static void

Detaylı

Yazılım Kodlama ve İ simlendirme Standartları v1.0

Yazılım Kodlama ve İ simlendirme Standartları v1.0 Yazılım Kodlama ve İ simlendirme Standartları v1.0 İçerik Yazılım Kodlama ve İsimlendirme Standartları... 2 1. Amaç... Hata! Yer işareti tanımlanmamış. 2. Kapsam... Hata! Yer işareti tanımlanmamış. 3.

Detaylı