Soyut Sınıflar (Abstract Class),Alfasayısal İşlem Komutları,Yapay

advertisement
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:"<
Download