Re: [Linux-programlama] Yapisal Programlama / Nesne Temelli Programlama

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Özgür (ozgur_ugur_ce@yahoo.com)
Date: Fri 27 May 2005 - 21:05:03 EEST


Bu fikirlere paralel olarak, bir de ortada yalan yanlis bir genelleme bulunmakta.
>OOP ile gerceklestirilen bir projenin , bakim ve guncellemesi yapisal yaklasima gore daha
az maliyetlidir. < #304;sin temelinden bihaber kisileri bu kelime okadar cekmektedir ki.
Ama anlasilmayan; gerek yapisal gerek oop olsun, ne kadar iyi dokumanlastirilsalar bile,
analizin , yazilim sureci icerisinde degismesi halinde cikan maliyettir. OOP olunca bu is
hemen biter diye bir sey olamaz, dusunulemez bile. Dev bir agacin yapraklarini
budayabilir yada yeni dallar asilayabilirsiniz,oop belki bunu kolaylastiran olabilir, ama agacin
kokunu kesip yeni bir kok koymaya kalkmak nedemek. #304;sin ozu neyazikki en az deger ve sure verilen analiz ve tasarimda yatiyor.
 
Umarim bu onyargi cabuk biter, yoksa karar verenlerce planlanan vakti asan projeler yuzunden
verilen sozleri sirtlayan bizler harap olmaya devam ederiz.
 
Ozgur Ugur

Saygilar..

Serdar KÖYLÜ <serdarkoylu@fisek.com.tr> wrote:
Selamlar..

Aslında, tüm hepsi için "profesyonellik" ve "amatörlük" mevzusu demek en
doğru olanı sanıyorum.. Yanlış anlaşılan husus, amatör ile profesyonelin
aslında "zanaat" ve "sanat" gibi bir kavram olduğu, bilgi/beceri
seviyesi ile alakalı olmadığıdır. Profesyonel, para kazanmak için iş
yapar. en kısa yoldan, en sorunsuz çözümü çıkarabilmelidir. Amatör ise,
zevkini tatmin etmek için uğraşır. Garip bir şekilde, amatörlerin
acemiler gibi algılandığı çok olur. Ama örneğin Radyo amatörleri, Araba
amatörleri vs. acayip şeyler yapmıştır. Mesela, karada en hızlı giden
araçların amatörler tarafından yapılması gibi..

Peki neden uzatıyoruz bu kadar? Profesyonel işleyişte işi yapacak olan
insanlardır. Yani onların kafalarındaki şeydir iş. Ve Nesne olarak
yapılacak tarifler (=Nesneye yönelim metodolojileri) bu kafalarda daha
sorunsuz olacaktır. Ama bu tür çalışmayı, belgeleme, test, review, ...
checklists vs. olarak bir bütün halinde düşünürsek bu olay ortaya çıkar.
Kodlamayı nesneye yönelik olarak yapmanızdan bağımsız olarak, nesneye
yönelik düşünerek sistem gereklerini daha isabetli çıkarabilir bunları
ilerki safhalarda kolayca partisyonlara (=layer) ayırabilirsiniz.
Böylece "mythical man/month" da bahsedilen sorunların önüne
geçebilirsiniz. Yani, mesela her nesneyi başka adama verip, "Bir yazılım
projesine yeni eleman almak, sadece projenin daha da uzamasına neden
olur" olarak ifade edilebilecek durumu bir hayli tolere edebilmenizi
sağlar.

OOP yaklaşımında, genel toplamda, oluşan iş yükü vs. yapısal
programlamadan fazladır. Fakat işi yapanların sayısı birden fazlaysa
atıyorum %20 fazla iş yapılıyor olsa bile bunu 50/50 bölüp daha kısa
sürede sonuca ulaşırsınız (Bu cümleden OOP işi daha uzun sürer gibi bir
anlam çıkarmayın, "yapısal programlamada yeterince analiz gücünüz yoksa
çok daha fazla uğraşırsınız" = Size daha sağlam adamlar gerekir ki biraz
zor bulunurlar = Daha çok para vs..).

Bunun püf noktası, "nesne" dediğimiz atomik bileşenlerin diğer
nesnelerden ayrık olarak çok iyi tarif edilebilmesi, matematik soyutlama
yeteneği gerekmeden bunların daha net modellenebilmesidir. Nesnelerin
özelliklerini, hayat döngülerini vs. tarif edebilirsiniz, böylece
oluşturacağınız state machine için iyi bir model oluşturabilirsiniz.
Dahası bu süreci daha kolay otomatize/prosedürel hale getirebilirsiniz.

Ama söylediğim gibi nesneye yönelim bir felsefedir. Inheritance vs.
hepsini kapsar. Ama temeli veriyi kapsüllemedir. C vs. kullanmanız
nesneye yönelik tekniklerden mahrum kalmanızı gerektirmez. Fakat, aklın
yolu, nesneye yönelimi dil desteğiyle sunan uygulamaları kullanmaktan
geçer elbette. Ama amatör yaklaşıp, C ile taklalar atmak (arada düşüp
kafa göz yarsakta) ayrı bir zevk meselesidir. Fakat, siz olayı
profesyonel düşünüp belirlenen zamanda belirlenen noktada olmayı
garantilemek istiyorsanız, OOP yaklaşımlarını -ki bu sadece kodu ifade
etmez, dizayn, test yöntemleri vs. vs.- benimsemeniz, sizi bu felsefenin
içinde tutacak OOP dillerini tercih etmeniz yerinde olacaktır.

Genede, sistematiği nesnel programlamaya uymayan işlerde olacaktır.
Fakat çoğunlukla bunlar uygulamanın bütünü değil, bir bileşeni ile
sınırlanabilir.

Özellikle profesyonel çalışmada OOP kullanmak gereklidir. Bu, denenmiş,
bilinen bir şeydir. Ötesi, ancak flame sebebi olacaktır. Interneti biraz
eşeleyin, "OOP is bad" diyen ve sağlam gerekçelere sahip tonla döküman
bulursunuz. Fakat, C++ veya Java kullanmış olmakla OOP yaptığınızı
düşünmek abesle iştigal olur. Dediğim gibi işin özü nesne paradigmasını
iyi anlayabilmekten geçer. İşte kavrama bu noktadan değilde "Nesne
kullanan bir dil ile programlama yapmak" noktasından yaklaşırsanız
Nesneler sadece size angarya ve kafa ağrısı vereceklerdir.

Kısaca:

C++ kullanıyor olmanız sizi OOP'a taşımaz.
C kullanıyor olmanız sizi OOP'tan uzaklaştırmaz.

Nesneye yönelik çalışmada dizaynı buna yönelik bir dil kullanmak mutlak
daha iyidir.

Tercih, "OOP olsun mu olmasın mı?" değil, "OOP olacak. Bunu engelleyen
bir şey var mı?" sorgulaması ile yapılmalıdır.

O nesneler sadece sizin kafanızda. OOP kullanıyor olmanız her adımı iyi
hesaplamanız gerektiği, iki tık öğrenmekle programcı olunmayacağı
gerçeğini değiştirmez.

Saygı ve sevgiler..

> Merhaba,
>
> Serdar Hocam ile kavram tartışması yapmak çok zevkli olacak. :-)
>
> Sevgiler.
>
> Bora.
>

_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama

                
---------------------------------
Do You Yahoo!?
 Yahoo! Small Business - Try our new Resources site!

_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.