Görsel Programlama-I (Visual Programming) 1.Hafta 2011-2012 Bahar Dönemi Mehmet Akif Ersoy Üniversitesi Meslek Yüksekokulu Burdur 2012 Muhammer İLKUÇAR <imuammer@yahoo.com> 1
Görsel Programlama Console programlama Visual( Görsel) Programlama 2 Graphics User Interface (GUI)
Class Yapısı 3
Görsel Programlama 4 Görsel Diller Nesne tabanlıdır. Programda kullanılan bütün öğeler birer nesnedir.
Görsel Programlama Dilleri Görsel programlar iki bölümden oluşur 1-Kod (syntax) alanı 2- Tasarım Design (GUI) alanı F7 tuşu ile Design- Kod Penceresi arası geçişler 5
Görsel Programlama Dilleri Graphics User Interface (GUI) (Grafik Kullanıcı arabirimi) Kullanıcıya kullanım kolaylığı sunan ve göze hoş gelen arayüze sahip programlardır. Kullanıcı işlemlerini, görerek ve fare ile seçip klikleyerek yapabilecek yapıdaki grafiksel yazılımlardır. Günümüzdeki pek çok program görseldir. Görsel Programlama Dilleri Visual Pascal (Delphi) Visual Basic Visual C Visual C#.NET Visual Java Visual PHP... 6
Görsel Programlama Dilleri Görsel programlama dilleri OOP (Object Orianted Programming- Nesne Tabanlı programlama) tabanlıdır. Yani görsel diller nesneler üzerine kurulmuştur da diyebiliriz. Bir program oluşturmak için, daha önce oluşturulmuş nesneleri sürükle bırak (drag-drop)yöntemiyle programımıza dahil edip istediğimiz şekilde değişiklik yaparak programımızı oluşturabilmemizi sağlar. Bir proje modüllere bölünerek; her modül (nesne) farklı kişiler tarafından yapılabilir. Daha sonra modüller birleştirilerek proje oluşturulabilir. Böylece program daha hızlı oluşabilmektedir. Modüller Farklı projelerde farklı amaçlar için kullanılabilir. Class-Object-Component (Sınıf, Nesne, Bileşen) terimleri farklı olmasına rağmen bazen aynı anlam için kullanılabilmektedir. 7
Class - Object Component (Nesne tabanlı programlama) Name (adı Örn: insan sınıfı) Özellikler (properties) Ağırlık (ağırlık=65) Boyu (boyu=170) Ten Rengi Saç tipi Saç rengi Göz rengi Metodlar(methods) Konuşma() Yürüme () Ağlama () Gülme () Zıplama () 8 Yeni bir insan oluşturulacağında insan sınıfından türetilip özellikleri değiştirilir.
Class Yapısı Örnek Araba sınıfı (Class) Name (adı) : araba Properties(Özellik) Markası Hızı Vites Tekerlek Renk Methods (Fonksiyon) Constructure (Yapıcı Method) Destructure(Yıkıcı Method) Hızlanma () Vites Değiştirme() Durma () Events( Olaylar) 9
Class Yapısı Araba Spor Arabalar Limuzinler Transporters Lotus Ferrari Rolls Royce Pickup Kamyon Otobüs 10 Kaynak : http://fbim.fh-regensburg.de/~saj39122/jfroehl/diplom/e-21-text.html
Class Yapısı Temel Class Türetilmiş(inherit) Class Türetilmiş(inherit) Class Türetilmiş(inherit) Class 11
Class Yapısı Temel Class Türetilmiş(inherit) Class Türetilmiş(inherit) Class Türetilmiş(inherit) Class 12
Nesne Erişim İzinleri Erişim Belirleyiciler ve Erişilebilirlik Seviyeleri Bir sınıfa ait üyeler için erişilebilirlik konusu önemlidir. Peki, Erişilebilirlik ne demektir? Erişim belirleyiciler kullanarak bir üyenin güvenliğini sağlamış oluruz. Eğer bir üyeye sınıfımız içindeki metotlar dışında herhangi bir erişim yapılmasını istemiyorsak veya projemiz dışında herhangi bir yerden bu üyeye erişim izni vermek istemiyorsak erişim belirleyicileri kullanmak zorundayız. 13
C#.net Erişim izinleri C#.Net programla dilinde erişim izinleri Erişim Belirleyici private Açıklama Erişim seviyesi private olarak ayarlanan üyelere sadece bu üyenin bulunduğu sınıf içerisinden erişilebilir. internal protected protected internal public Sadece üyenin bulunduğu proje içerisinden erişilebilir. Sadece üyenin bulunduğu sınıf ve bu sınıftan türemiş alt sınıflardan erişilebilir. Sadece üyenin bulunduğu proje içerisinden ayrıca üyenin sınıfından türemiş alt sınıflar tarafından erişilebilir. public üyelerin erişiminde herhangi bir kısıtlama yapılmaz. İstenilen her yerden üyeye erişim açıktır. 14
C#. NET Class deyimleri C#.Net Class larla ilgili olarak aşağıdaki kavramlar vardır: Constructors Destructors Fields Methods Properties Indexers Delegates Events Nested Classes 15
Soru ve Önerileriniz? 16
OOP ile ilgili kavramları Okuyunuz lütfen 17
Nesne Tabanlı Programlama(OOP) Temelde OOP belirli bir problemin çözüm adımlarını parçalara bölerek bunları objeler haline dönüştürmektir. Buradaki temel amaç ileriki zamanlarda aynı problem ile karşılaşıldığında bu objelerin kullanılması. Tabii çözümü bir bütün olarak değil de bir parçalar olarak ele alındığından dolayı müdahalesi ve değişimi de daha hızlı olmaktadır. Örnek vermemiz gerekirse günümüz fabrikasyon üretimleri örnek olabilir. Mesela bir araba üreticisinin yeni bir araba serisi üretmek istediğini düşünün. Bu araba serisinin belirli özellikleri olduğu gibi birbirinden farklı özellikleri de olacaktır. Yapılacak araba serisi: A10, A11, A12 diye adlandırıldığını farz edelim. Her üç araba serisi içinde klima, merkezi kilit, müzik sistemi olacaktır. A11 serisinde ekstra olarak yol bilgisayarı, yağmur sensörü olacaktır. A12 serisinde ise yol bilgisayarı, yağmur sensörü, hava yastığı, sesli kontrol sistemi yer alıyor. Her üç araba serisi içinde kullanılan ortak materyaller klima, merkezi kilit, müzik sistemi, camlar, kapılar, farlar, direksiyon, v.b. materyallerdir. Firma bu materyallerin tasarımı ve üretimini bir sefer yapmaktadır. Ama aynı materyalleri üç farklı araba serisinde kullanmaktadır. OOP deki ana mantık da budur. Problemimiz araba yapmaktır, problemin çözümü için gerekli olan yol belirlenir. Daha sonra bu çözüm yolu parçalara bölünür. Bütün parçalar birer objedir. Ve objeler birleşimi problemin çözümüdür. 18
OOP nin Ortaya Çıkışı ve Faydaları OOP aslında bir mecburiyetten ortaya çıkmıştır. OOP nin en büyük avantajı büyük çaplı projelerdeki zaman ve para kaybını önlemesidir. 1960 ların sonuna doğru programların git gide büyümesi ve programlardaki değişikliklerin çok uzun zaman alması ve maliyetinin yüksek olması ile ortaya çıkmış bir programlama yaklaşımıdır. Prosedürel Programlama (sınıf yapısı olmadan, Örn: Timelinde sınıf yapısı olmadan programlamak) ile kodlanan yazılımlardaki değişiklikler çok uzun zaman alır. Mesela değiştirmek istediğiniz bir işlev için binlerce satır kod arasına girip saatlerce belki günlerce uğraşmanız gerekmektedir. OOP de ise bu mantık farklıdır. Değiştirmek istediğiniz işlevi sınıf yapısı içerisinde değiştirip hemen güncelleyebilirsiniz. Bu hem kodların daha derli toplu olmasını sağlar. Hem yapılacak olan değişiklikler için zaman kaybı olmaz ve maliyeti düşürür. Ayrıca yazılan sınıf yapılarını tekrar tekrar kullanabilirsiniz. Yani bir proje içerisinde yer alan sınıf yapısını farklı bir projede kullanabilirsiniz. 19
OOP Terimleri 1 Sınıf (Class) : Bir şeyin soyut olan özellik ve yeteneklerini tanımlar. Mesela yukarda verdiğimiz örnekteki araba. Araba ilk başta size somut gelebilir ama araba deyince herkesin aklına aynı şey gelmiyor, evet araba ama hangi araba? Siz sınıf ile tüm arabaları ele alıp hepsinin ortak özelliklerini tek bir çatı altında toplamış oluyorsunuz. Sınıfın amacı budur. Eğer tam olarak anlaşılmadıysa aşağıdaki madde kafanızdaki tahmin ettiğim soru işaretlerine cevap olacaktır. 2 Nesne (Object) : Bir sınıftan oluşmuş somut olan varlıktır. Bir sınıftan nesne yaratmaya programlamada nesne örnekleme denir.az önce yukarıdaki maddede arabaya soyut dedik ve bunun nedenini belirtirken de araba deyince herkesin aklına farklı bir şey gelmesidir dedik. Şimdi size Ferrari F50 desem aklınıza farklı bir araba geleceğini hiç sanmıyorum. Artık ortada somut olan herkesin ne olduğunda uzlaştığı bir nesne vardır. İşte biz nesne kavramı ile bu somut olan şeyleri tanımlıyoruz. Bir başka deyişle her Ferrari F50 bir arabadır ama her araba bir Ferrari F50 değildir diyebiliriz. 20 http://aydinunlu.blogspot.com/2008/10/c-ile-nesne-ynelimli-programlama_9149.html
OOP Terimleri 3 Yöntem (Method-Fonksiyon) : Bir nesnenin sahip olduğu yeteneklere yöntem denir. Anadol umuzun korna çalabilmesi onun bir yeteneğidir. Veya camının açılabilmesi, cam sileceklerinin çalışabilmesi bunların hepsi ve aklıma gelmeyen bunlara benzer yeteneklerin her biri nesnemizin yöntemleridir. 4 Kalıtım (Inherithance) : OOP nin en temel kavramlarından biridir. Sınıflar arasındaki hiyerarşinin kurulmasını sağlar. Ayrıca bunu yaparken de bir sınıfın, bir başka sınıftan türeyebilmesini de sağlar. Kalıtım işlemi sonucunda, türeyen sınıfa (derived class), temel sınıftaki (base class) tüm özellikler ve yetenekler aktarılır. Ayrıca birden fazla sınıf, aynı sınıftan türeyebilir. 21 http://aydinunlu.blogspot.com/2008/10/c-ile-nesne-ynelimli-programlama_9149.html
OOP Terimleri 5 Sarmalama (Encapsulation) : Bir sınıf içinde bulunan üyelerin (üyeler özellik ve yeteneklerin genel adıdır), o sınıfı kullananlar tarafından erişilip, erişilemeyeceğini belirlemeye yarar. Örnek vermek gerekirse arabamızı çalıştırdığımızı düşünelim, biz sadece anahtarı yerine sokup çeviriyoruz değil mi, o anda arka planda olan hiç bir işleme karışmıyor ve müdahale edemiyoruz, yani ben anahtarı çevirince o motora giden enerjiyi açıyor, benzini pompalıyor ve buna benzer bir dizi işlemi sırayla yapıyor ama biz bununla ilgilenmiyoruz ve buna erişemiyoruz, işte bu mekanizma bizim erişemememiz için kapsüllenmiştir. Aksi taktirde kaputu açıp enerjiyi biz vermeye kalksaydık istenmeyen durumlarla karşılaşabilirdik. Bu çok uç bir örnek oldu farkındayım o yüzden daha basit bir örnek vermek gerekirse hepimiz cep telefonu kullanıyoruz, mesaj yazarken birini ararken tuşlara basıyoruz ama telefonun içindeki devrelere erişmemiz engellenmiştir. Bu işlemi yapabilmemiz için tuş takımı geliştirilmiştir. Yani bu devreler bir nevi kapsüllenmiştir. Modelleme yaparken de bazen sınıfımızın üyelerine dışarıdan erişilebilmesini engellemek veya buna sınırlamalar getirmek isteyebiliriz, işte encapsulation kavramı bize bunu sağlıyor. 22 http://aydinunlu.blogspot.com/2008/10/c-ile-nesne-ynelimli-programlama_9149.html
OOP Terimleri 6 Çok Biçimlilik (Polymorphism) : Bir yeteneğin sınıfa has düzeyde olmasını sağlar. Örneğin yukardaki Araba sınıfımıza bir de VitesDeğiştir diye bir method ekleyelim. Ve bu yetenek başlangıç olarak DuzVites modunda çalışsın. Bu yetenek tahmin edebileceğiniz gibi Arabadan türeyen sınıflarımız olan OndenCeker, ArkadanCeker ve DortCeker e de kalıtım sayesinde geçecektir ve Arabada nasıl tanımlandıysa o şekilde yani düz vites çalışma mantığıyla geçecektir. Vites değiştirme işlemi DortCeker sınıfım için düz değil de, otomatik şekilde olsun. İşte polymorphism ile bu yapı desteklenebilir. Yani VitesDegistir yeteneğini farklı davranmasını istediğim sınıf içinde istediğim şekilde tekrar yorumluyorum ve o metod artık Araba sınıfından geldiği DuzVites hali ile değil de, yeni tanımladığım otomatik haliyle çalışabiliyor. 7 Soyutlama (Abstraction) : Bu kavramı basitçe şöyle tanımlayabiliriz; bir sınıf var ama bu sınıftan bir nesne yaratamıyorsunuz. Soyut olan bu sınıfı sadece yeni sınıflar türetebilmek amacıyla onlara rehberlik olsun diye kullanıyorsunuz. Bir başka deyişle, bir sınıfın oluşmasına rehber olacak özellik ve yeteneklerin soyut bir sınıf dahilinde tanımlanmasıdır. 23 http://aydinunlu.blogspot.com/2008/10/c-ile-nesne-ynelimli-programlama_9149.html