yazan: Şadi Evren ŞEKER
yapısal programlama 1900lü yılların ortalarında programlama taleplerinin artması ile gelişen bir programlama felsefesidir. Buna göre programların analizi, tasarımları, kodlaması ve testleri arasındaki mantık uyumunu sağlamak amacıyla bir standarda gidilmiş ve aşağıdaki yapı çıkmıştır. Yapısal programlama amaç problemi alt parçalara bölerek bu parçaların çözümlerinin birleştirilmesidir. Bu yönüyle parçala fethet (Divide and conquere) yaklaşımı olarak kabul edilebilir.
yapısal programlamanın ortaya atılmasındaki sebepler:
1. goto komudunun karmaşıklığı: goto (atla, git veya jump) satırı bir kodun analizi, okunabilirliği ve testlerini neredeyse imkansız hale sokabilecek kadar karışmasını sağlayabilir. Bunun en basit sebebi akışların kontrol edilemez halde olmasıdır. Her ne kadar tersi iddialar da bulunsa güncel dillerin pek çoğu goto komutlarını sakıncalı bulmuş olsalar gerek bu komdu dilin doğal bir özelliği değil ama ek bir özelliği gibi barındırmaktadırlar.
2. tasarımda kullanılan yöntemlerin uyarlanma zorluğu: yapısal programlama öncesinde tam olarak ortaya atılmış ve genel kullanıma sahip, formal bir analiz ve tasarım sistemi bulunmuyordu. Yapısal programlama düşünme mantığında bir yenilik getirmesi hasebiyle tasarım ve analiz aşamalarında da güncel akış çizelgeleri (flow chart) öncülük etmiştir.
Yapısal programlama sahip bir dilde kontrol işlemleri (şartlar) aşağıdaki şekilde üçe ayrılırlar:
1. Akış (sequence) bir alt programdan diğerine geçiş işlemi. (fonksiyon veya prosedür, bkz. prosedürel programlama )
2. iki alt programdan birisini bir bool mantık işlemine göre çalıştırmak. ( if , eğer )
3. bir şart sağlanana kadar bir alt programın çalıştırılması (döngüler, loop , iteration, for, while)
yukarıdaki şartları destekleyen bir dil yapısal programlama mantığına sahiptir denilebilir. Yukarıdakilerden birisinin eksik olması yapısal programalaya sahip olmaması için yeterlidir. Günümüzde gelişen ihtiyaçlar ile artık tek bir yaklaşıma sahip diller yoktur. Bunun yerine pek çok farklı yaklaşımlara sahip diller bulunmaktadır. Örneğin C, C++, JAVA gibi diller yapısal programlayı yukarıdaki şartları destekledikleri için barındırmaktadırlar. Ancak bu diller farklı yaklaşımları da bünyelerinde barındırmaktadır.
Aşağıda yapısal programlama yaklaşımına göre tasarım yapmayı ve bir akış çizelgesi (flow chart) çizmeyi adımlara bölmüş yaklaşım verilmiştir:
1. Yapılması istenen adımları basit bloklara böl
2. Her bloğu tek bir çıkışı olacak şekilde yeniden tasarla veya böl
3. Bu çıkış noktlarını kullanarak blokları birbirine bağla
4. Tekrarlı bloklar için döngüleri ve döngülerin koşullarını tanımla
5. Çatallanma (dallanma, fork) için şartları tanımla (if)
6. Bağlantı eksikleri bulunan blokların son bağlantılarını tamamla
Yukarıdaki adımlar tanımlandıktan sonra basit yorumlar yapılabilir. Örneğin bir değişken tanımlayarak ilk değer olarak 0 atasak, her bloğa girişinde bir arttırsak ve her bloktan çıkışında bir azaltsak program sonunda değişkenin değerinin 0 olması beklenir.
Yapısal programlama, bir programlama yaklaşımı olup, güncel gelişmelerle birlikte kullanılmaya devam etmektedir. Örneğin nesne yönelimli programlama yaklaşımlarını kullanan dillerin neredeyse tamamı yapısal programlamayı da bünyelerinde barındırmaktadır.