|
C Programcıları UML Kullanabilir mi? |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bu yazımda sizlere, UMLin yapısal programlama dillerinde kullanılıp kullanılamayacağını açıklayacağım. Örneğin; C programcıları bu modelleme dilinden yararlanabilirler mi sorusu çoğunuzun aklına takılmıştır. Bu yazıda özellikle C dilinde UML kullanımı konusu açıklanacak, diğer programlama yöntemlerine değinilmeyecektir. Aynı zamanda; UML içinde kod üretimi konusu açıklanarak bir örnek üzerinde incelenecektir.
UMLin Ortaya Çıkışı
UML (Unified Modelling Language), nesneye yönelik programlamanın hakimiyetini göstermeye başladığı 90lı yıllarda yazılımların analiz ve tasarımını kolaylaştırmak için ortaya konulmuştur. 90ların başında; Rumbaugh, Jacobson ve Booch farklı yöntemlerle nesneye yönelik programları modellemeye çalışıyorlardı. Rumbaugh ve Booch, o yıllarda Rational firmasına katıldı ve geliştirdikleri yöntemleri birleştirmeye başladılar. UMLin ilk adımları bu sayede atılmış oldu. 1 yıl sonra Rational firması bu konu için, Jacobsonu da projeye dahil ederek UMLin daha güçlü bir yapıya kavuşmasını sağladı. Daha sonra; OMG (Object Management Group) diğer firmaları da UML konusunda standart oluşturmak için bir araya getirdi ve UMLin ilk versiyonu ortaya çıktı.
Grafiksel olarak modellemenin yapıldığı bu dil, beklenilenden daha hızlı sürede geniş kitlelerce kabul gördü. Rumbaugh bile, bu kadar hızlı şekilde kabul edileceğini tahmin etmediğini yaptığı açıklamalarda ifade etmiştir. Diğer spesifikasyon dillerindeki (örneğin; Z) zorluk UML içinde olmadığı için, gerek müşterilerle ilişkilerde gerekse de geliştiriciler arasındaki haberleşmede etkin olarak kullanılmaya başlandı. UML; nesneye yönelik programları modellemeye çalışan Rumbaugh, Jacobson ve Booch tarafından ilk temelleri ortaya konulduğu için ne sneye yönelik programlama (NYP) dillerinin kullanıldığı projelerde tercih edildi. Ancak; C gibi yapısal programlama dili kullanan geliştiriciler bu modelleme dilini önemsemediler.
UMLnin NYP Dışında Kullanımı ve Geliştirilen Ürünler
UMLin sadece NYP dilleri ile kullanılabileceğini söylemek mümkün değildir. Çıkış noktası; NYP dilleri olsa bile mevcut yapısı diğer metodolojileri de destekleyecek şekildedir. Etmene yönelik programlamada da (agent oriented programming) UMLin kullanılabiliyor olması buna örnek olarak verilebilir. Agent UML olarak bilinen AUML, yapay zeka uygulamalarında etmenlerin kullanıldığı sistemleri modellemede tercih edilir. UML içindeki <<stereotype>> ifadeleri, UMLi genişletmek için kullanılmaktadır. İleriki makalelerin birinde AUMLe değinmek istiyorum. O açıdan şimdi sadece, yapısal dillerde UML kullanımını incelememizde fayda var.
C geliştiricileri genel olarak tasarım aşamasında; fonksiyonel ayrıştırma (decomposition) veya nesne tabanlı tasarımı tercih etmektedirler. Kalıtımın yer almadığı nesneye yönelik programlamayı, nesne tabanlı tasarım olarak düşünebilirsiniz. Kalıtım NYP dillerine özgü olduğu için, bu özellik yapısal dillerin tasarımında kullanılmamaktadır. UMLnin NYP dilleri için geliştirilmiş olması her ne kadar problemler doğursa da UMLi genişleterek bu sorunlar çözülmektedir.
C geliştiricileri için nesne kavramı çok karmaşık değildir ancak nesneler arasındaki mesajlaşma, geliştiricilerin zor alışacağı bir yaklaşımdır. Ayrıca; kalıtım kavramı da C geliştiricilerinin alışık olmadığı bir kavramdır. Tasarımlarında UML kullanabilmek için, geliştiricilerin yapısal programlamadan NYPye geçmesi firma için riskli olabilir. Aynı zamanda; gömülü sistemlerde C++ dilinin Cye göre daha fazla bellek gereksinimine ihtiyaç duyduğu bilinmektedir. Bu nedenle; C dili geliştiricilerinin de UMLden faydalanabilmesi için bazı firmalar araçlar geliştirmektedir.
Rhapsody 6.0 ürünü, C geliştiricilerin bu ihtiyacını tam anlamıyla karşılamaktadır. C diline özgü ifadelerin tasarımda gösterilebildiği ve bu tasarımdan kod üretildiği bir araç pazara bu sayede sunulmuştur. Rhapsody yetkilileri, C geliştiricilerinin pazarın %50sini oluşturduğunu ifade etmektedir. Bu açıdan; bu ürün ile C geliştiricilerinin de UML konusuna çekileceği beklenmektedir. Yakın zamanda birçok firma, bu alandaki eksikliği görecek ve ürünlerinde C dili için destek sunmaya başlayacaktır.
Yapısal Programların UML ile Gösterilmesi
UML içinde kaynak kodlar "file" elemanı ile gösterilmektedir. Bu elemandan, yapısal programları modellerken yararlanabilir ve içerisine değişkenleri, fonksiyonları yerleştirebiliriz. Rhapsody aynı isimdeki .c ve .h dosyalarını File olarak değerlendirmektedir. Bu "file" bilgisinden ilgili programları üretir. Peki, C++ içerisindeki private kavramı C dili için modelleme yaparken fonksiyonlar için kullanılabilir mi? Aklınıza C dilindeki statik fonksiyonları getirin. Bu fonksiyonu .h içinde tanımlamaz ve .c dosyası içerisinde statik olarak tanımlarsınız. Bu sayede bu fonksiyon sadece ilgili dosya içerisinden çağrılabilir.
UML aracı seçerken dikkat etmeniz gereken bir nokta da, kod ve tasarımı senkron olarak güncelleyebilme özelliğidir. Tasarımda değişiklik yaptığınızda bu değişiklik kodda görülmeli, benzer şekilde kodda değişiklik yaptığınızda tasarımda bu değişiklik görünmelidir. Bu özellik; "round-trip" (gidiş-geliş) olarak ifade edilmektedir. Bu özelliğin olmadığı araçlarla geliştirme yapıyorsanız, tasarımınızın kod ilerledikçe güncelliğini yitireceği açıktır. Projelerin sonunda da bu tasarımların güncellenmesindeki zorluğu düşünürseniz bu özelliğin önemini farkedeceksinizdir. Benzer şekilde; yapısal programlama dillerini destekleyen UML araçlarında da bu özelliğin yer alması tercih sebebi olacaktır.
UMLi C dilinde kullanmaya çalıştıkça karşımıza bazı sorunlar çıkabilmektedir. Tüm bu sorunları incelemek ve çözümlerini açıklamak yerine bu aşamada, Metamill UML (www.metamill.com) aracında C dili için nasıl kod üretildiğini görmek daha yararlı olacaktır. Metamill aracını değerlendirmek için webden indirebilir veya tam sürümü için 125 USD ödeyerek satın alabilirsiniz. Metamill aracını yükledikten sonra, çalıştırdığınız zaman karşınıza "UseCaseView", "DesignView", "ImplView" gelecektir. DesignViewda sağ tıklayarak "New Diagram" ve ardından "Class Diagram" seçilecektir. Bu noktada; nesne tabanlı olarak tasarım yaptığımızı düşünelim ve C dilindeki "struct" ifadesine benzer şekilde bir sınıf (class) oluşturalım. Bu sınıfın ismi Person ve veri elemanları; "age" ve "name" olsun. Benzer şekilde set ve get fonksiyonları bu sınıf içerisinde gösterilsin. Şekil 1de, Person sınıfı gösterilmektedir. Bu sınıftan C kodu ürettirmek için, Filedan ModelProperties seçilir ve gelen ekranda "C" dili seçilir. Bu seçim; Şekil 2de gösterilmektedir.
Şekil 1 : Person sınıf örneği
Şekil 1 : Programlama dilinin seçimi
Daha sonra Person sınıfı diagram üzerinde seçilerek; Ctrl+G tuşlarına basılır ve kod üretilir. Kodlara, Metamili kurduğunuz dizindeki src klasörü altından erişebilirsiniz. Bu işlemin ardından; Person.h ve Person.cpp dosyaları src altında görülmektedir. Person.h dosyası aşağıda verilmektedir:
#ifndef _PERSON_H_
#define _PERSON_H_
/*
//==============================================================
// File : Person.h
// Generated : 08 Jun 2005 23:22
// by : cagatay
// Company : cagatay
//--------------------------------------------------------------
// !! Note: This file was generated by Metamill 4.1.
// !! Make changes only inside user blocks.
// !! Medium code markers generated.
//==============================================================
*//*#UBLK-BEG-HEADERH*/
/*#UBLK-END-HEADERH*/
/* CMODULE=mm:1b8c41e9-d859-11d9-87c3-fd849dcf7a74 */
/* -- Module: Person -- */
/*#UBLK-BEG-CLASSDEF*/ /* mm:1b8c41e9-d859-11d9-87c3-fd849dcf7a74 */
/*#UBLK-END-CLASSDEF*/
/* METHOD=mm:3bbbf895-d859-11d9-87c3-fd849dcf7a74 */
int getAge();
/* METHOD=mm:850c459f-d859-11d9-87c3-fd849dcf7a74 */
string getName();
/* METHOD=mm:96ede6c9-d859-11d9-87c3-fd849dcf7a74 */
void setName(string nameVal);
/* METHOD=mm:4f676c49-d859-11d9-87c3-fd849dcf7a74 */
void setAge(int ageVal);
int m_age;
int m_name;
/*#UBLK-BEG-GLOBALH*/
/*#UBLK-END-GLOBALH*/
#endif /* _PERSON_H_ */
|
Person.cpp dosyası ise aşağıda verilmektedir.
/*
//==============================================================
// File : Person.c
// Generated : 08 Jun 2005 23:22
// by : cagatay
// Company : cagatay
//--------------------------------------------------------------
// !! Note: This file was generated by Metamill 4.1.
// !! Make changes only inside user blocks.
// !! Medium code markers generated.
//==============================================================
*//*#UBLK-BEG-HEADERC*/
/*#UBLK-END-HEADERC*/
#include "Person.h"
/* Function: see header file for documentation. */
int getAge()
/*#UBLK-BEG-METHOD*/ /* mm:3bbbf895-d859-11d9-87c3-fd849dcf7a74 */
{
}
/*#UBLK-END-METHOD*/
/* Function: see header file for documentation. */
string getName()
/*#UBLK-BEG-METHOD*/ /* mm:850c459f-d859-11d9-87c3-fd849dcf7a74 */
{
}
/*#UBLK-END-METHOD*/
/* Function: see header file for documentation. */
void setName(string nameVal)
/*#UBLK-BEG-METHOD*/ /* mm:96ede6c9-d859-11d9-87c3-fd849dcf7a74 */
{
}
/*#UBLK-END-METHOD*/
/* Function: see header file for documentation. */
void setAge(int ageVal)
/*#UBLK-BEG-METHOD*/ /* mm:4f676c49-d859-11d9-87c3-fd849dcf7a74 */
{
}
/*#UBLK-END-METHOD*/
/*#UBLK-BEG-GLOBALC*/
/*#UBLK-END-GLOBALC*/
|
Bu örnekte görüldüğü gibi; mevcut araçlarla UMLde tasarımı yaparak C ile kod üretmek mümkündür. Rhapsody 6.0 ürününü kullanırsanız çok daha gelişmiş özelliklerle C dilinde UMLyi kullanmanız mümkün olacaktır. Metamilli kullanarak C#, Java, C++, C dillerinde kod üretmeniz mümkündür. Aynı zamanda; tersine mühendislik (reverse engineering) kavramı ile de kod üzerinden tasarım oluşturmak mümkündür.
Sonuç
Bu yazıda; C programcılarının da UMLden yararlanabileceği ortaya konulmuştur. UMLin genişletilebilir yapısının ve yeni geliştirilen araçların bu noktada geliştiricilere kolaylık sağlayacağı ifade edilmiştir. Metamill aracı üzerinde basit bir sınıfın C kodu oluşturularak çıktıları incelenmiştir. UML aracı seçerken; round-trip olarak ifade edilen özelliğin desteklenip desteklenmediğini incelemenin yararı ortaya konulmuştur.
Bir sonraki yazıda görüşmek üzere,
Çağatay Çatal
[email protected]
Makale:
C Programcıları UML Kullanabilir mi? UML ve Sistem Analizi Çağatay Çatal
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|