C#nedir?com
 
YAZAR HAKKINDA
Çağatay Çatal
Çağatay Çatal
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
6 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: benzer degisiklik generated kavrami metamill nesneye ortaya person programlama programlari rhapsody tasarim tercih uml?in yapisal UML / Analiz Çağatay Çatal
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : UML / Analiz
Yayınlanma Tarihi : 10.6.2005
Okunma Sayısı : 30277
Yorum Sayısı : 0     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Burak Selim Şenyurt
.NET Core 2.0 ile Basit Bir Web API Geliştirmek 18.10.2017
Burak Selim Şenyurt
Python - Flask ile Basit Bir Web Uygulaması Geliştirmek 18.10.2017
Turhal Temizer 'in Blogu
ChatBot UI Sample 18.10.2017
Turhal Temizer 'in Blogu
C# – IRR Function 18.10.2017
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
C Programcıları UML Kullanabilir mi?
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Bu yazımda sizlere, UML’in 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.

UML’in Ortaya Çıkışı

UML (Unified Modelling Language), nesneye yönelik programlamanın hakimiyetini göstermeye başladığı 90’lı yıllarda yazılımların analiz ve tasarımını kolaylaştırmak için ortaya konulmuştur. 90’ları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. UML’in ilk adımları bu sayede atılmış oldu. 1 yıl sonra Rational firması bu konu için, Jacobson’u da projeye dahil ederek UML’in 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 UML’in 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.

UML’nin NYP Dışında Kullanımı ve Geliştirilen Ürünler

UML’in 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) UML’in 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, UML’i genişletmek için kullanılmaktadır. İleriki makalelerin birinde AUML’e 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. UML’nin NYP dilleri için geliştirilmiş olması her ne kadar problemler doğursa da UML’i 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 NYP’ye geçmesi firma için riskli olabilir. Aynı zamanda; gömülü sistemlerde C++ dilinin C’ye göre daha fazla bellek gereksinimine ihtiyaç duyduğu bilinmektedir. Bu nedenle; C dili geliştiricilerinin de UML’den 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 %50’sini 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.

UML’i 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. DesignView’da 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 1’de, Person sınıfı gösterilmektedir. Bu sınıftan C kodu ürettirmek için, File’dan ModelProperties seçilir ve gelen ekranda "C" dili seçilir. Bu seçim; Şekil 2’de 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 UML’de 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 UML’yi kullanmanız mümkün olacaktır. Metamill’i 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 UML’den yararlanabileceği ortaya konulmuştur. UML’in 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
cagatay@csharpnedir.com

Makale:
C Programcıları UML Kullanabilir mi? UML ve Sistem Analizi Çağatay Çatal
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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