Soyut Class) Sınıflar (Abstract Nesne tabanlı programlamada sınıf hiyerarşisi oluşturulurken, bazen en tepede bulunan sınıf türünden nesneler programcılar için anlamlı olmayabilir. Hiyerarşinin en tepesinde bulunan sınıfın kendisinden türetilecek olan alt sınıflar için ortak bir arayüz (interface) görevi yapması istenebilir. Bunun için çözüm olarak oluşturulan metotlara ve sınıflara soyut metot (abstract method) ya da soyut sınıf (abstract class) denir. Soyut sınıflar büyük projelerde kullanılırlar ve kalıtım özelliğini kullanarak kod tekrarını azaltırlar. Soyut sınıflar diğer sınıflara taban olmak için kullanılırlar.Önlerine “abstract” sözcüğü yazılarak soyutlaştırılırlar. Dikkat edilmesi gerekenler : Soyut sınıflar “abstract” türünden nesneler tanımlamazlar. Soyut sınıflar içerilerinde soyut olmayan metotlar da barındırabilir ancak soyut metotlar sadece soyut sınıflar içerisinde bildirilebilir. Soyut metotlar türeyen sınıfta mutlaka bildirilmelidir. Soyut metotlar override edilmek zorundadırlar, aksi takdirde derleyici hatası alınır. “Static” metotlar soyut olarak tanımlanamazlar. Soyut sınıflar “private” olarak tanımlanamazlar ama “public” ve “protected” olarak tanımlanabilirler. Soyut sınıflar “sealed” anahtar sözcüğü ile ifade edilemezler. Soyut sınıflarda yapılandırıcılar(contructor),static metotlar soyut metot olamazlar ve bu sınıflardan nesne üretilemez. Java’da soyut sınıf gösterimi abstract anahtar sözcüğü ile yabılmaktadır.extends kelimesiylede alt sınıfı super sınıfa bağlarız (inherit etmesini sağlarız).Kullanımı şu şekildedir: [crayon-59f7301d3be8d244655804/] Şimdi de örnek bir uygulama yazalım.Oldukça basit bit bir örnek.Şekill adında super soyut sınıfımız var ve alt sınıfları kare ve dikdörtgendir(İstediğimiz kadar şekil ekleyebiliriz.).Alt sınıfların ortak yaptıkları işlev alan hesaplamadır.Bu nedenle alan metodumuzu soyut metot yapacağız. [crayon-59f7301d3be9f069805610/] Şekil sınıfımızdan nesne oluşturamayız bu nedenle sekil adında instance yapıp buna Kare nesnesi atadık.Böylece artık sekill instance artık Kare gibi davranacaktır ve alan metodu çağrıldığında Kare’nin alanını hesaplayacaktır.Dikdörtgen için de aynı şeyleri yaptık…Program çıktısı ise : [crayon-59f7301d3beaa278261904/] Yazar : Ahmet Burak Tektaş Kaynakçalar : http://aylincsknn.blogspot.com.tr/2013/04/javada-soyut-s inifabstract-class.html http://bidb.itu.edu.tr/seyirdefteri/blog/2013/09/08/soyu t-s%C4%B1n%C4%B1f-(abstract-class) Alfasayısal İşlem Komutları Karakter ve karakter grupları(kelime,cümle,vb) üzerinde işlem yapan komutlardır. PASCAL ALGORİTMA BASIC UZUNLUK LEN Lenght KOPYALA MID$ Copy ASCIIKOD ASC Ord ASCIIKAR CHR$ Chr C strlen C++ C# JAVA lenght Lenght lenght copy Substring substring toascii toascii BÜYÜK UpCase toupper toupper ToUpper toUpperCase KÜÇÜK tolower tolower ToLower toLowerCase SAYISAL (tamsayı) VAL ALFASAYISAL STR$ (tamsayı) Val atoi atoi Tolnt32 Int32.Parse parseInt Str itoa itoa ToString toString Seçkin YayıncılıkKAYNAK Algoritma Geliştirme ve programlamaya giriş Doç.Dr. Fahri VATANSEVER SEMA SERDAROĞLU Yapay Zeka Teknolojisi Nedir? Çağdaş dünyada bilgisayarlar ve bilgisayar sistemleri yaşamın vazgeçilmez bir parçası haline gelmiştir. Elimizdeki cep telefonlarından, mutfaklardaki buzdolaplarına kadar birçok alet bilgisayar sistemi ile çalışmaktadır. İş dünyasından kamu işlerine, çevre ve sağlık organizasyonlarından askeri sistemlere kadar hemen hemen her alanda bilgisayarlardan faydalanmak olağan hale gelmiştir. Bunun aksini düşünmek bile teknolojinin nimetlerini hiçe saymak olarak görülmektedir. Teknolojinin gelişmesi izlendiğinde önceleri sadece elektronik veri transferi yapmak ve karmaşık hesaplamaları gerçekleştirmek üzere geliştirilen bilgisayarların zaman içerisinde büyük miktarlardaki verileri filtreleyerek özetleyebilen ve mevcut bilgileri kullanarak olaylar hakkında yorumlar yapabilen nitelikler kazandığı görülmektedir. Günümüzde ise bilgisayarlar hem olaylar hakkında karar verebilmekte hem de olaylar arasındaki ilişkileri öğrenebilmektedir. Matematiksel olarak formülasyonu kumlamayan ve çözülmesi mümkün olmayan problemler sezgisel yöntemler yolu ile bilgisayarlar tarafından çözülebilmektedir. Bilgisayarları bu özelliklerle donatan ve bu yeteneklerinin gelişmesini sağlayan çalışmalar “yapay zeka” çalışmaları olarak bilinmektedir. İlk defa 1950’li yıllarda ortaya atılan yapay zeka terimi zaman içinde oldukça yoğun ilgi görmüş ve 40- 50 yıllık bir zaman diliminde hayatın vazgeçilmez parçası olan sistemlerin doğmasına neden olmuştur. Bu sistemler hem araştırmacılar hem de ticari olarak satıcılar tarafından “Zeki Sistemler” olarak adlandırılmaktadır. Zeki sistemlerin geliştirilmesinde yapay zeka biliminin katkısı çok fazladır. Benzer şekilde de zeki sistemlerdeki gelişmeler de yapay zeka biliminde gelişmelere neden olmaktadır. Zeki sistemlerin en temel özellikleri olaylara ve problemlere çözümler üretirken veya çalışırken bilgiye dayalı olarak karar verebilme özelliklerinin olması ve eldeki bilgiler ile olayları öğrenerek, sonraki olaylar hakkında kararlar verebilmeleridir. Yapay zeka bilimindeki gelişmeler bu sistemlerde çeşitlendirmeye neden olmaktadır. Bir taraftan donanım teknolojisi gelişmekte ve daha hızlı çalışabilen, daha çok bilgiyi saklayabi- len, daha karmaşık sistemleri ve fonksiyonları yerine getiren bilgisayarlar ve bilgisayar sistemleri oluşturulmakta iken diğer taraftan yazılım teknolojisi gelişmekte ve bilgi işleme yetenekleri, öğrenme, karar verebilme, problem çözme, muhakeme yapabilme yöntemleri ve bu yöntemlere dayalı yazılım sistemleri geliştirilmektedir. Bu gelişmeler ise zeki sistemlerin her geçen gün daha yaygın olarak bilinmesine ve gerçek hayatta insanların kullanımına alınmasına neden olmaktadır. Artık bilgisayarlar eskiden olduğu gibi sadece bilgi iletişiminin ve hesaplamaların otomasyonunu yapan sistemler olarak görülmemektedir. İnsan karar verme sürecine oldukça benzer bir karar verme sürecine kavuşmakta ve daha karmaşık fakat kullanışlı sistemler ortaya çıkmaktadır. Çalışmalar laboratuardan çıkmakta ve her geçen gün daha fazla ticari sistemler ortaya çıkmaktadır. İnsanlar olayları çözmek için her gün biraz daha zeki sistemler geliştirmek için yarışmaktadırlar. Bazı sistemler ise zeki olmadıkları halde işlemleri otomatik olarak gerçekleştirdiklerinden, zeki sistem diye tanıtılmakta ve pazarlanmaktadır. Bunlara otomasyon sistemleri demek daha doğru olur. Yeni çıkan zeki sistemler bu otomasyon sistemlerinin yerini almaktadır. Her geçen gün gerçek zeki sistemlerin sayısı artmakta ve zeki olmayan otomasyon sistemleri ortadan kalkmaktadır. Artık eskisi gibi otomasyon sistemlerine zeki sistemler denmemektedir. Sadece zeka ürünü olan fonksiyonları gerçekleştiren sistemler zeki sistemler olarak adlandırılmaktadır. Bu gelişmeler ve ticari sistemlerin başarılı şekilde uygulanması yapay zeka teknolojisinin gelişimine ilgileri daha çok çekmiş ve yapay zeka önceleri sadece bir ilgi odağı iken bugün artık bir bilim dalı haline gelmiştir. Günümüzde üniversitelerde yapay zeka bölümleri açılmıştır. Yapay zeka mühendisleri (bilgi mühendisleri) yetiştirilmektedir. Yapay zeka bilimine genel bir bakış yapılırsa; Bu bilimin, bilginin organizasyonu, öğrenme, problem çözme, teorem ispatlama, bilimsel buluşların modellenmesi gibi bir çok konu ile ilgilendiği görülmektedir. Bu yetenekler ile donatılan bilgisayar sistemleri problemlere çözüm üretirken insanın problemleri çözme sürecini taklit etmektedir. Özellikle belirli bir algoritma veya formülasyon kullanılarak çözülemeyen problemlerin çözülmesi için yapay zeka sistemleri geliştirilmektedir. Problemin çözümünü sağlayan bir algoritma geliştirilmiş ise geleneksel bilgisayar sistemleri problemi çözmek için yeterli olmaktadır. Önemli olan problemin çözümünü veren bir formülün olmadığı durumlarda bilgisayarlara problemleri çözdürmektir. Yapay zeka bu görevi üstlenmiş bir bilim dalıdır. UML ile Modelleme Nesneye Yönelik Herşeyden önce UML(Unified Modeling Language) bir progralama dili değildir. UML daha çok Nesneye Dayalı Programlama için kullanabileceğimiz bir modelleme dilidir. Grady Blooch, James Rumbaugh ve Ivar Jacobson tarafından geliştirilmiştir. Yazılım teknolojisi geliştikçe yazılan programların karmaşıklığı ve zorluğu giderek artmaktadır. Yazılan programların karmaşıklığı arttığı için kod organizasyonu önem kazanmıştır. Bu sebeple üretilen modelleme ve analiz dili olan UML. Programlama aşamasında olabilecek sorunların en aza indirilmesini sağlamaktadır. UML yazılımların hem maliyetini hem etkisini hemde ömürünü artırır. UML ile dokümantasyonu yapılan bir programın sonradan düzenlenmesi daha kolay olur. UML’in faydalarından bahsedersek : Kodlama işlemini kolaylaştırır. Çünkü programdan ne beklediğimizi ve programlama ile neler yapacağımızı belirleriz. Programda beklenmedik mantıksal hataları (bug) minimuma indirgemiş oluruz. Tasarım aşaması düzgün yapıldıysa, programın daha kolay geliştirilebilmesi sağlanacaktır. Bellek kullanımının daha iyi belirlenmesini sağlar. Programın kararlılığını artırır. Ortak çalışılan projelerde programcıların iletişimini daha kolay hale getirir. UML 9 Diyagram Türünden Oluşur : Class Diagram: Sınıfları baz alarak yapılan diyagramdır. Object Diagram: Sınıfın yerine gerçek nesneler kullanılır. State Diagram: Nesnelerin zamanlara ayrılmış durumlarını gösteren diyagramdır. Sequence Diagram: Gerçek zamanlı sistemlerde zaman içinde değişen interaktiviteleri gösterir. Activity Diagram: Bir nesnenin durumunun değişim sırasını gösterir. Use Case Diagram: Programın davranışlarının kullanıcı gözüyle incelenmesidir. Collaboration Diagram: Bir sistemin bütün parçalarının birbirleriyle olan ilişkilerini gösterir. Component Diagram: Birden çok geliştiricinin birlikte çalıştığı projelerde program componentlere ayrılır. Bu tür projelerde bu diagram kullanılır. Deployment Diagram: Sistemin, bilgisayarlar arasındaki bağlantılar, programın kurulacağı makinalar ve sistemdeki aletler gibi fiziksel incelenmeleri yapılır. Nesne kavramında önemli olan özellikler vardır. Bunlar: Kimlik(identity): Nesneyi unique olarak tanımlar ve onu diğer nesnelerden ayırır. Durum(state): Özellikler(fields veya attributes) ile belirtilir. Davranış(behavior): Metot, metot adı, aldıüı parametre türleri ve döndürdüğü tür ile tanımlanır. [crayon-59f7301d3d026311785120/] Sınıf kavramının önemli özellikleri : Alanlar(fields): Nesne özelliklerini tanımlayan değişkenler, adları ve türleri ile. Metotlar(methods): Metot adları, döndürdüğü tür, parametreleri, ve metotu gerçekleştiren program kodu. [crayon-59f7301d3d034713574922/] Erişim Belirleyicilerin Gösterimi Public: UML’de + sembolü ile gösterilir. Protected: UML’de # sembolü ile gösterilir. Package: UML’de ~ sembolü ile gösterilir. Private: UML’de – sembolü ile gösterilir. UML’de Nesne Gösterimi UML’de Paket Gösterimi Assocation (Sınıflar arası ilişki) Sınıflar arasındaki ilişkiyi göstermek için iki sınıf arasına düz bir çizgi çekilir. İlişkiyi gösteren çizginin üzerine ilişkinin türü yazılır. Bir İnsan sınıfı gerçek nesnesi olan “Ali” ile kitap sınıfı gerçek nesnesi olan “UML kitabı” arasında “okuma” ilişkisi vardı.Kısaca şöyle deriz. Ali, UML kitabı okur. Bazı durumlarda sınıflar arasındaki ilişki, bir çizgiyle belirtebileceğimiz şekilde basit olmayabilir.Bu durumda ilişki sınıfları kullanılır.İlişki sınıfları bildigimiz sınıflarla aynıdır. Özellik ve işlev elemanları olabilir. Sınıflar arasındaki ilişki eğer bir sınıf türüyle belirleniyorsa UML ile gösterimi aşağıdaki şekildeki gibi yapılır. Şu ana kadar gördüğümüz ilişkiler bire‐bir ilişkilerdi.İlişkiler bire‐bir olmak zorunda değildir.Bir sınıf, n tane başka bir sınıf ile ilişkiliyse buna bire‐çok ilişiki denir.Mesela Yüzbaşı ile Er arasında bire‐yüz bir ilişki vardır. Diyagramda bunu gösterirken Yüzbaşı sınıfına 1 Er sınıfına ise 100 yazacağız. Gösterimi aşağıdaki gibidir: Kalıtım(Inheritance) Kalıtım UML’de şu şekilde gösterilir: İçerme (Aggregations) Bazı sınıflar birden fazla parçadan oluşur.Bu tür özel ilişkiye “Aggregation” denir.Mesela ,bir TV’yi ele alalım.Bir televizyon çeşitli parçalardan oluşmuştur.Ekran,Uzaktan Kumanda,Devreler vs.. Bütün bu parçaları birer sınıf ile temsil edersek TV bir bütün olarak oluşturulduğunda parçalarını istediğimiz gibi ekleyebiliriz. Aggregation ilişkisini ‘bütün parça’ yukarıda olacak şekilde ve ‘bütün parça’nın ucuna içi boş elmas yerleştirecek gösteririz. Örnek bir şekil aşağıdaki gibidir. şekilde Arayüz(Interface) Sınıf ile arayüz arasındaki ilişkiyi kesik çizgilerle ve çizginin ucunda boş üçgen olacak şekilde gösteririz. Sınıf ile arayüz arasındaki bu ilişkiye gerçekleme(realization) denir. Sınıfla, arayüz arasında UML gösterimi açısından fazla bir fark yoktur.Tek fark arayüzde özellik(attribute) yoktur.Diğer bir fark ise arayüz adlarını yazarken adın üstüne <interface> yazısını eklemektir.Aşağıda bir arayüz‐sınıf ilişkisi mevcuttur. Kapsülleme (Encapsulation) Şimdi ise kalıtım kullanarak hayvanları oluşturalım: Böylece kalıtım olmadan: 9 dosya, 200 satır tutan kodun, Kalıtım Kullanarak: 13 dosya, 167 satır koda, %15 tasarruflu bir şekilde nasıl dönüştüğünü UML kullanarak daha iyi kavramış oluyoruz. Use Cases Diyagramları Sistem gereksinimleri UML Use Case (kullanım şekilleri) diagramları ile belirtilir. Yazılım geliştirme için gerekli değildir, fakat gereksinimler ve nesnel modeller arasında önemli bir bağlantıdır. Ücretsiz bir UML programı için : ArgoUML Yazar: Hasan Alp ZENGİN Kaynaklar: sibelsomyurek.com/veritabani/11_uml.pptx univera-ng.blogspot.cz/2009/12/uml-ve-modelleme-bolum-4class-snf.html slideshare.net/aselmanb/uml-ile-modelleme Sabit (Static) Değişkenler: Sabit (Static) Değişkenler: Eğer fonksiyonun içinde bildirimini yaptığımız değişkenin değerinin, program çalıştığı sürece fonksiyon tekrar tekrar çalıştırıldığında değişmesini istemiyorsak sabit (static) değişkenler kullanmamız gerekir. DipNot: Program yazarken eğer yerel değişken tanımlamak mümkünse (işimizi) görüyorsa değişkenleri yerel tanımlamalıyız. Çünkü yerel değişkenler işi bittikten sonra atılır. Global değişkenler ise hep kalır. Sabitler Program çalışması süresince değişmeyecek olan değerlerin saklanması için kullanılırlar. const ile ifade edilirler. Örneğin, pi sayısı şöyle tanımlanır: double const pi = 3.14; Sabit olması nedeniyle tanımını const olarak yaptık. Program içerisinde pi değişkeninin değeri hiçbir şekilde değiştiremeyiz. DipNot: Eğer const (veri_tipi)(değişken_adi) şeklinde bir tanım yaparsak, bu defa da program içerisinde pi değişkeninin veri tipini değiştiremeyiz. const double pi = 3.14; Bu tanımlamada double veri tipini int yapamayız artık. Sabitler programın en başında main( ) fonksiyonunun önünde tanımlanır ve program içerisinde değiştirilmezler.Sabitlerin tanımında # define indirektifi kullanılır. Örnek= #define True 1 #define False 0 #define Max 20 #define Harf “a” Bu örneklerde define direktifi kullanılarak programdaki sabitler tanımlanmıştır.Bu tanımlamalardan sonra define Max 20 ifadesi 20 sayısını ifade edecektir.Harf sabitide programın herhangi bir yerinde kullanıldığında “a” harfini ifade edecektir. İkinci bir tür sabit tanımlama şekli değişkenlerin tanımlandığı bölümde tanımlanan değişkene bir değer atamaktır. Örnek= int a=25; char cr=”r”; Dairenin alanını hesaplayan programı yazınız örnek: #include using namespace std; int main(){ double coats pi=3.14; int r; cout<< "yaricapi girin:"<