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: Armag Eddon (listekd@gmail.com)
Date: Fri 27 May 2005 - 12:19:06 EEST


Oncelikle emeginize, elinize saglik. Oldukca faydali bir yazi oldu benim icin.

En azindan, kendi kendime soyledigim "tamam ama neden sart deniliyor"
kisir dongusunden cikmis oldum. Yani, ilk mesajimda da belirttigim
gibi, gerekliligini kavrayamamistim, gerekliligini kavramak
istiyordum. Simdi benden kat kat tecrubeli kisilerden gerekliligi
tartisilir, nesnesel yapiyi kullanan programcilarin bu olmazsa olmaz
dedigi(cogu yerde) seylerin aslinda biraz da haksiz bir savunma oldugu
fikrini teyit etmis oldum. Yani demek istedigim sey su, en basit ornek
olarak php ile template sistemi incelemeye kalktigimda goruyorum ki,
herkes nesne kullanmis vs. Lakin, ben bunu kafamda yapisal olarak
kurgulamis, ve uygulayabilecegime eminim diyerek kendimde bir sorun
aramaya calisiyordum, yanlis dusundugumu saniyordum cogu zaman.
Oyleya, olurdu da neden herkes nesneyle yapti ki, sorun muhtemelen
bendeki dusuncededir demeye getiriyordum. Fakat, bunun bir
gereklilikten ziyade, bir kolaylik araci oldugu fikrini kabullendim.

Su anda en makulu de sanirim, uygulamaya baslamdan evvel, dil bagimsiz
olarak, teknigin avantajlarini, kolayliklarini kavramaya devam etmem
olacak. Ben sozdizimi farkina takilmis da degilim, takildigim yer
sadece ve sadece teorik mana, onem ve gerekliligi idi. Bunu halletme
yoluna devam edeyim, kafamda bitireyim ki sizin de dediginiz gibi ben
nesne teknigini kullaniyorum diye kendimi kandirmayayim. Gerekliligini
anlayayaim ki, gerektigi yerde kullanayim.

Tekrar tekrar tesekkurler.
Kolay Gelsin...

On 5/27/05, Serdar KÖYLÜ <serdarkoylu@fisek.com.tr> wrote:
> Selamlar..
>
>
> > Merhaba,
> >
> > Nesne Tabanlı Programlama'nın gerekliliğini "anlamak" için bazı
> > deneyimleri yaşamak gerekiyor.
> >
> > (i) "Büyük" bir uygulama yazmak. Bunu ekip halinde yazmak. Mesela 8-10
> > kişinin 1-2 yıl kod yazacağı bir şeyin içinde bulunmak.
> > Gereksinimlerin sürekli değiştiği bir ortamda bu ölçekte bir
> > uygulamanın düzgün biçimde ve hatasız biçimde teslim edilmesi için
> > yapısal programalamanın sunduğu bir yöntembilim yok.
> > Yapısal programlama "dondurulan" bir gereksinim belgesinin var
> > olduğunu düşünür. Ancak böyle bir şey yoktur. Nesne tabanlı
> > programlama ise üzerine kurulduğu "soyutlama" kavramı sayesinde
> > varlığını zaten kabul ettiği "değişen gereksinimler" için "esnek"
> > yapılar kurmaya olanak sağlar.
>
>
> Bu biraz öngörüsel bir kavram. Yok olup olmadığı ayrı bir tartışma
> konusu. Fakat bu "Yapısal programlama için böyle bir mekanizma
> getirilemez" çıkarımını getirmez. Yani dilerseniz, yapısal programlama
> içinde benzer yöntemler bulabilirsiniz.
>
>
> > (ii) Eski, hatta başkasının yazdığı, bir uygulamaya "bakım" yapmak.
> > Kimin, nerede, ne amaçla, neyi, nasıl ve ne zaman yaptığını kısa
> > sürede tespit edip, gerekli görülen değişiklikleri yapabilmek için
> > uygulamanın yapısının çok iyi kurgulanması gerekir. Nesne tabanlı
> > programlama bu konuda son derece güçlü araçlar sunar. Elbette yazılım
> > bakımı sadece değişiklik gereken yeri tespit etmekle bitmez. Bir de
> > bu değişikliğin, yazılımın geri kalan kısımlarında ek bir değişiklik
> > gerekmeden (yada azıcık gerektirerek) yapılabilmesi gerekir. Nesne
> > Tabanlı Programlama burada da avantajlı.
>
>
> İyi kurgulanmamış nesne tabanlı bir program için bunlar geçerli
> olabildiği gibi, iyi kurgulanmış yapısal bir kod içinde benzer
> avantajları görebiliriz.
>
>
> > (iii) Önceden yazılan uygulamalardaki kodları kullanarak, aynı türden
> > olmasa da, yeni bir uygulamayı daha hızlı biçimde geliştirmek. Yani
> > yeniden kullanım (re-use) sağlamak. Bu konu çok tartışılmakta olan bir
> > konu. Nesne tabanlı proramlama "bileşen" hazırlamak ve kullanmak için
> > çok önemli bazı alt yapılar getirerek bu amaca ulaşmak için
> > kullandığımız temelleri atmıştır.
> > Uygulama çatısı olarak adlandırdığımız şeyler de buradan çıkmıştır.
> > PHP ile benzeterek bir örnek vermeye çalışayım. Nuke kodları ile
> > oynayarak bir portalı kısa sürede çıkartmak çok yapılan bir şey. Ama
> > sonuçta Nuke'de olmayan bir özellik, davranış ve hatta dış görünüşte
> > ciddi bir değişiklik istendiği zaman tıkanmak olası. Ancak nesne
> > tabanlı bir portal uygulama çatısı ile çalışınca, ne
> > geliştirdiğimizden bağımsız biçimde kazanımlarımız oluyor. Bu nedenle
> > bakınca "Nuke" demek olasılığı kalmıyor. Neyin çalıştığını
> > anlayamıyorsunuz. Çünkü aslında çok da önemi yok. Birisini söker
> > ötekini takarsınız. (Madde ii)
>
>
> Buda biraz totoloji. Bugün C ile uygulama yazarken tonla kütüphane
> kullanıyoruz ve önceden yazılmış kodları tekrar tekrar güzelce
> kullanıyoruz. Değişiklik vs. yapmak içinde aynı durum elbette geçerli.
>
>
> > Kısaca özetlersek "nesne tabanlı düşünce" bambaşka bir düşüncedir.
> > Yapısal düşüncenin çözemediği problemleri çözmek için yapısal
> > düşüncenin dışına çıkar. Kavramlarının bazılarının yapısal düşüncede
> > dengi yoktur.
>
> Eğer, nesne tabanlı yaklaşım içindeki kavramların yapısal programlamada
> olmaması ile tersi her zaman doğru olacaktır. Olay şudur. Nesneler
> programcının kafasındadır, bilgisayarda nesne filan yoktur.
>
> Nesneye yönelik paradigmayı en basit tanımla;
>
> nesne->yontem(parametre); // Nesnel yaklaşım..
> yontem(nesne, parametre); // Yapısal yaklaşım...
>
> Şeklinde özetleyebiliriz. Kısacası Nesneye yönelik çalışmanın
> avantajlarını bu şekilde özetlemek biraz yanlış olur. Nesneye yönelik
> çalışmanın illaki mevcut dillerdeki "class" gibi kavramlarla açıklanmaya
> çalışılması da bir diğer sorundur.
>
> Nesne mevzusunun getirileri çoktur, günlük hayatta karşılaşılacak
> sorunların pek çoğuna daha kolay çözümler de sunar. Ama bunun için
> öncelikle NESNE kavramını anlamak gerekir. Şöyleki, siz hiç alakasız
> dillerle (mesela BASIC veya C) de nesneye yönelik çalışabilirsiniz.
> Yukarıda saydığınız yaklaşımlar, nesneye yönelimin getirileri değil,
> sonuçlarıdır. Aynı faydaları sıradan yapısal programlama araçları ile de
> sağlamak mümkündür.
>
> Nesneye yönelimin tek avantajı, analiz ve dizayn aşamalarında sağladığı
> kolaylıktır. Bunun da sebebi, işlenecek veriyi saklayıp güzelce bunu
> işleyecek kodla birlikte kapsüllemesidir. Bunun dizayn için avantajı son
> derece büyüktür. Çünkü bir "nesne" yi verilerinin nasıl olduğuna
> bakmaksızın, onun dilinden anlamaksızın kullanabilirsiniz. Bunu o kadar
> iyi yapabilirsiniz ki, kendinizin bir parçası gibi kullanabilirsiniz.
> Çünkü dışarıdan bakanlar için sizin neyi yaptığınız, nasıl yaptığınız
> vs. değil, yapabildikleriniz önemli olur. Nesneyi kullanırken şunun
> datasına bir bakalım. Mesela bir buffer olsun bu data. Şuna biraz data
> ekleyelim, ama buffer boyu yeterli değilse vs. gibi düşünmekten
> kurtulursunuz. Buffer'i bir nesne olarak tanımlar, ona "la işte sana
> data, bunu sonuna ekle" dersiniz. Gerisini o nesne kendisi halleder.
> Verinin diğer nesne ve kullanıcılardan saklanmış olması, verinin farklı
> şekillerde sunulabilmesini mümkün kılar. Bu sayede örneğin verilerinizi
> kalıcı yapabilir, başka sisteme taşıyabilir vs. bunları yaparken de o
> nesnenin uyumluluğu hakkında düşünmekten kurtulursunuz.
>
> Nesneye yönelimi bir mesaj ile açıklamak zor olacak. Ama nesne
> kavramının tek avantajının veriyi saklamak ve bu sayede veri dediğimiz
> şeye akıl kazandırmış olmak olduğunu püf noktası olarak söyleyebiliriz.
> Biz artık veri ile değil, o verinin kullanılacağı görevle
> ilgilenebiliriz. Konuyu biraz açmak için bir nesnemiz olsun ve ne
> yaparsak veriyi saklamış oluruz/olmayız buna bir bakalım.. Örnek
> nesnemiz ekrandaki bir yazı kutusu (textbox) ve ilgilendiğimiz şeyde
> onun yazı rengi ve içeriğindeki yazı olsun vede jenerik bir dil
> kullanalım..
>
> public:
> renk yazirengi;
> string icerik;
> function void refresh();
> private:
> ....
>
> ....
>
> textbox.yazirengi = "#FFFFFF";
> textbox.refresh();
>
> Olmadı... Birisi dışarıdan yazı rengini değiştir dediği zaman, sizin bir
> değişkeninizi değiştirmeyi değil, görünen renginizi düşünmeli. Bu şöyle
> olmalı mesela:
>
> public:
> function void setyazirengi(renk yenirenk);
> function renk getyazirengi();
>
> private:
> renk yazirengi;
>
> Oldu işte.. Hayır, hayır olmadı.. Gene olmadı.. Siz gene "nesnel"
> kavramdan uzaklaştınız. Çünkü get/set gibi konuyu yapısallığa çeken
> doğal düşünce varsayımına ters oldunuz. Daha doğrusu şöyle olmalı:
>
> public:
> property yazirengi;
>
> private:
> renk gecerliyazirengi;
>
> .......
> // Kod icinde bir yer..
>
> textbox.yazirengi = "#FFFFFF";
>
> Neden get/set gibi bir method değilde, böyle bir property? Çünkü nesnel
> yaklaşımda siz nesneye senin yazı tipin şu demelisiniz. Bunun set/get
> edileceği vs. hepsi nesnenin sorumluluğundadır. setyazirengi() gibi bir
> yaklaşımınız, nesneyi yazan tarafından farklı şekilde algılanabilirken,
> nesneyi kullanan tarafından da farklı şekilde algılanabilir. Elinizde
> 3-5 nesne, 5-10 property varsa burada doğabilecek farklar aklıda kalıcı
> olur ama, böyle dar uygulamalar sadece ödevlerde olur. Geniş çaplı
> uygulamalarda binlerce nesne ile uğraşırken bu ve/veya benzeri bilgiyi
> akılda tutabilmek zordur. Nesneye şunu diyorum, bunu diyorum yaklaşımı
> olmamalıdır. Yaklaşım, nesneyi kullanmaktır. Programcı nesneye emir
> yönelttiğini değil onun yazi rengini değiştirdiğini düşünmelidir.
>
> Hal böyle olunca, C ile nesnel düşünce oturtmaya filan boğuşmaktansa,
> C++ veya Python gibi nesneye yönelik bir dil kullanmaya çalışmak en
> iyisidir. C++ için stream ve operator overloading kavramı en iyi
> anlaşılan örnek olacaktır. Bu sayede insanlar dil tanımında hiç olmayan
> "stream" mantalitesini dilin bir parçası imiş gibi rahatlıkla
> kullanabilirler.
>
> cout << "Sayı";
>
> Nesneye yönelim iyidir. Ama her zaman en iyisi değildir. Daha kötüsü,
> eğer siz nesneye yönelik bir çalışma yaptığınızı düşünüp felsefesini
> yapısal yaparsanız gene amacınıza ulaşamazsınız.
>
> Demek ki, bu yaklaşımın getirilerinin sonucu olarak çıkan avantajları
> değil, nesneye yönelimin felsefesine dair yaklaşımları öne çıkarmak
> gerekir. Ve de nesneye yönelim tercih edilmeli, bolca kullanılmalıdır.
> Hatta, C gibi yapısal olarak kabul edilen bir dil kullanıyor olsanız
> bile bu felsefenin kodunuza katabileceği çok şey vardır.
>
> Elbette, kavramsal yaklaşımı aşmış, çalışan programa çalışırken şöyle
> bir bakınca veri yapılarını filan kestirebilecek tecrübeniz varsa
> yapısal veya nesnel kavramlar size fuzuli görünecektir. Fakat, o hale
> gelmiş olmak gerçekten zor iştir, o yüzden en kısa zamanda nesneye
> yönelik çalışmanın üzerine gitmek faydalı olacaktır..
>
> Saygı ve sevgiler..
>
> _______________________________________________
> Linux-programlama mailing list
> Linux-programlama@liste.linux.org.tr
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>

_______________________________________________
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.