آشنایی با یو ام ال


ما برای طراحی نرم‌افزار نیاز به یکسری چارت و نمودار داریم که برای این منظور از چیزی تحت عنوان Unified Modeling Language که به اختصار UML (یو ام ال) خوانده می‌شود استفاده خواهیم کرد. اگرچه که واژه ی Language را در نام این یو ام ال می بینیم، اما این در حالی است که یو ام ال یک زبان برنامه نویسی نیست بلکه نمودی عینی از یک طرح نرم‌افزار است که با استفاده از آن، چارتی که بخش‌های مختلف یک سیستم شیء گرا را تشکیل می‌دهند نشان خواهیم داد.

برای روشن شدن ساختار یو ام ال، مجدد به حساب بانکی که پیش از این مورد بررسی قرار دادیم باز می گردیم. گفتیم که کلاسی داریم تحت عنوان BankAccount که در آن یکسری Attribute داریم تحت عناوین accountNumber و accountType. علاوه بر این، کلاس ما دارای یکسری Behavior است که از آن جمله می‌توان به ()open و ()close و ()withdraw اشاره کرد. یو ام ال چنین کلاسی به صورت زیر خواهد بود:

به چنین تصویری اصطلاحاً UML Class Diagram گفته می شود. همان‌طور که در تصویر فوق مشخص است، کلاس اصلی به همراه Attribute و Behavior هایش نمایش داده شده است. علاوه بر این، کلاسی تحت عنوان SavingAccount داریم که از کلاس BankAccount ارث بری می‌کند و این در حالی است که نسبت به کلاس والد، یک Attribute تحت عنوان interestRate بیشتر دارد. در طراحی یو ام ال، زمانی که بخواهیم نشان دهیم که یک کلاس از کلاس دیگری ارث می بری می کند، این کار را با استفاده از فلش از سمت کلاس فرزند به طرف کلاس والد نشان خواهیم داد.

در ردیف اول، نام کلاس می‌آید که معمولاً نامگذاری کلاس در برنامه نویسی شیء گرا به صورت مفرد است. به عبارت دیگر، به جای نام BankAccounts از نامی همچون BankAccount استفاده می کنیم. علاوه بر این، نحوه ی نامگذاری می بایست به این شکل باشد که حرف اول هر کلمه از نام کلاس به صورت بزرگ نوشته شود.

در ردیف دوم هم Attribute های کلاس مد نظر را می نویسیم و در نهایت هم در ردیف آخر لیست Behavior ها -یا بهتر بگوییم متدهای- کلاس مد نظر را می نویسیم. توجه داشته باشیم که در نامگذاری متدهای یک کلاس، همواره می بایست از یک فعل استفاده کرد. همان‌طور که در تصویر فوق مشاهده می شود، کلیه ی متدهای کلاس BankAccount فعل هستند؛ فعل open به معنی «باز کردن»، فعل close به معنی «بستن» و فعل withdraw به معنی «گرفتن پول از حساب». علاوه بر این، متدها دارای یک جفت پرانتز هستند که وظیفه ی این پرانتزها این است که اگر متدی نیاز به پارامتر ورودی بود، آن پارامترها -یا آرگومان ها- را می‌توان داخل پرانتزها نوشت (به طور کلی، منظور از پارامتر ورودی، دیتای اولیه است که متد مد نظر ما برای آن که وظیفه‌اش را به درستی انجام دهد، نیاز به آن خواهد داشت.)

به خاطر داشته باشید
برای نامگذاری کلاس ها در زبان های برنامه نویسی شیء گرا از سبک نامگذاری PascalCase استفاده می شود. به عبارت دیگر، حرف اول از هر کلمه از نام کلاس به صورت بزرگ نوشته شود مثل BankAccount. علاوه بر این، برای نامگذاری Attribute ها و Method ها از سبکی تحت عنوان camelCase استفاده می کنیم که در آن حرف اول نام به صورت کوچک نوشته شود اما از کلمه ی دوم به بعد، حرف اول هر کلمه بزرگ نوشته شود مثل interestRate.

در طراحی یو ام ال ها، می‌توان پا را کمی از این هم فراتر گذاشت و اطلاعات بیشتری را در نمودار گنجاند:

همان‌طور که در تصویر فوق مشاهده می کنید، کلاسی داریم تحت عنوان Product که حاوی یکسری Attribute است

تحت عناوین isActive, name و itemNumber. ما در یو ام ال این امکان را خواهیم داشت تا نوع یک Attribute را نیز تعریف کنیم. برای مثال، برای name نوع استرینگ را در نظر گرفته‌ایم به این صورت که پس از name علامت : را قرار داده سپس کلیدواژه ی String را نوشته ایم. حال اگر این Attribute دارای مقدار اولیه نیز باشد، می‌توان یک علامت = قرار داده و داخل علامت های دابل کوتیشن نامی برای آن همچون New Product در نظر گرفت. Attribute دوم isActive نام دارد که نوعش بولین است. به عبارت دیگر، این Attribute یا می‌تواند true باشد یا false و در نهایت به itemNumber می‌رسیم که نوع آن داده‌ای است از جنس عدد صحیح.

در قسمت متدهای این کلاس، می‌بینیم که کلاس Product ما دارای چهار متد مختلف است که اولین آن‌ها getName نام دارد. این متد هیچ گونه پارامتر ورودی ندارد چرا که داخل پرانتزهای مقابل آن خالی است اما می‌بینیم که پس از نام متد یک علامت : قرار گرفته سپس کلیدواژه ی String نوشته شده است. این بدان معنا است که خروجی این متد داده‌ای از جنس استرینگ است. متد دوم setActive است که دارای یک پارامتر یا آرگومان ورودی از جنس بولین است. متد سوم getProductDetails نام دارد که خروجی آن داده‌ای است از جنس استرینگ و در نهایت به متدی تحت عنوان formatProductDetails می‌رسیم که خروجی این متد هم استرینگ است.

علاوه بر این، در کنار نام Attribute ها و Method ها علامت های – را + می بینیم. این علایم Visibility یا «قابلیت روئیت» ویژگی‌های این کلاس را مشخص می کنند. به طور مثال، Attribute های name, isActive و itemNumber صرفاً از داخل این کلاس قابل روئیت هستند و سایر ابجکت ها به آن‌ها دسترسی نخواهند داشت (این قابلیت، به اصل Encapsulation برنامه نویسی شیء گرایی بر می گردد.)

از میان متدها نیز، متدهای setActive, getName و getProductDetails دارای علامت + هستند و این بدان معنا است که این متدها هم از داخل این کلاس و هم توسط سایر آبجکت ها قابل روئیت اند اما متد formatProductDetails دارای علامت – است و این بدان معنا است که این متد صرفاً از داخل این کلاس قابل روئیت است.

در نهایت به Note یا «یادداشت» می رسیم. گاهی اوقات نیاز داریم تا برای درک بهتر یو ام ال، از یادداشت‌هایی استفاده کنیم که نحوه ی به کارگیری از یادداشت‌ها نیز به همین صورتی است که در تصویر فوق مشاهده می شود.

پس از این که فرا گرفتیم به چه شکل می‌توان یو ام ال کلاس مد نظر را طراحی کنیم، حال نوبت به تبدیل یو ام ال به کدهای واقعی می رسد که در آموزش بعد با این مبحث آشنا خواهیم شد اما پیش از آن، نیاز است تا با یکسری ابزارهای طراحی یو ام ال نیز آشنا شویم. بسیاری از برنامه نویسان هستند که با استفاده از قلم و کاغذ، وایت برد و چیزهایی از این دست اقدام به طراحی یو ام ال، فلوچارت و نمودارهای مورد نیاز خود می‌کنند اما این در حالی است که یکسری ابزارهای مفید نیز به بازار عرضه شده‌اند که با استفاده از آن ها، با سرعت و دقت بیشتری می‌توان اقدام به طراحی یو ام ال کرد که در ادامه با برخی از پرکاربردترین آن‌ها آشنا خواهیم شد.

Visio
مایکروسافت ویزیو نرم افزاری از خانواده ی مایکروسافت آفیس است که برای طراحی نمودار، یو ام ال و … ساخته شده است و تحت سیستم عامل ویندوز کار می کند. این نرم‌افزار برای اولین بار در سال 1992 توسط شرکتی تحت عنوان Shapeware به بازار عرضه شد که در سال 2000 توسط شرکت بزرگ نرم افزاری مایکروسافت خریداری شد.

OmniGraffle
این نرم‌افزار که برای سیستم عامل مکینتاش طرحی شده است، برای طراحی و ساخت هر نوع گرافیکی من جمله یو ام ال مورد استفاده قرار می گیرد. از جمله قابلیت‌های این نرم‌افزار می‌توان به طیف گسترده ای از تمپلیت های از پیش طراحی شده ی این نرم افزار که کار توسعه‌دهنده را ساده‌تر و سریع‌تر می‌سازند اشاره کرد.

gliffy.com
gliffy یک نرم‌افزار نمودارکشی بر پایه ی رایانش ابری است که در سال 2005 توسط دو مهندس توسعه یافت که به منظور طراحی نمودارهای یو ام ال، پلان خانه، فلوچارت و … مورد استفاده قرار می گیرد. نکته‌ای که در مورد این نرم‌افزار تحت وب می‌توان اشاره کرد این است که کاربران به سادگی می‌توانند در هر لحظه‌ای که تمایل داشته باشند طرح های خود را با سایر کاربران به اشتراک بگذارند. گلیفی در مرورگرهای گوگل کروم، فایرفاکس، سافاری و اینترنت اکسپلورر نسخه ی 9 به بالا ساپورت می شود.

creately.com
creately هم یک ابزار آنلاین دیگر برای طراحی یو ام ال است که به گفته ی خود این سایت، بیش از 50 نوع نمودار مختلف با قابلیت‌های متفاوتی می‌توان توسط این ابزار طراحی کرد. علاوه بر این، امکان همکاری با سایر دوستان به صورت آنلاین نیز وجود خواهد داشت. پالت های رنگ این ابزار دست توسعه‌دهنده را باز خواهند گذاشت تا بتواند از رنگ‌ها و طرح های مختلف در طراحی یو ام ال استفاده کند. علاوه بر این، از creately می‌توان هم به صورت آنلاین و هم آفلاین، تحت دسکتاپ یا تحت وب استفاده نمود.

lucidchart.com
Lucidchart نیز یک ابزار آنلاین برای طراحی یو ام ال است. از جمله قابلیت‌های این نرم‌افزار آنلاین می‌توان به سازگاری آن با Google Apps و نرم‌افزار Visio مایکروسافت اشاره کرد.

پلاگین های طراحی شده برای IDEها
محیط های یکپارچه ی توسعه ی نرم افزاری (IDE) همچون اکلیپس نیز دارای یکسری پلاگین هستند که با نصب آن ها، می‌توان امکان کشیدن یو ام ال از داخل نرم‌افزار را به دست آورد. برای مثال، پلاگینی همچون UML Designer یک ابزار گرافیکی است که در صورت استفاده از آن، امکان طراحی انواع یو ام ال را از داخل نرم افزار Eclipse خواهیم داشت. لازم به ذکر است که این پلاگین رایگان و اپن سورس بوده و برای استفاده از آن نیاز به پرداخت هیچ گونه هزینه ای نیست.

ArgoUML
ArgoUML با استفاده از زبان برنامه نویسی جاوا نوشته شده است اما تحت هر پلتفرمی که جاوا را ساپورت کند، قابل اجرا است. این نرم‌افزار اپن سورس بوده و برای استفاده از آن نیاز به هیچ گونه هزینه ای نیست. این نرم‌افزار از اکثر ساختارهای UML رایج پشتیبانی می کند.

Dia
Dia یک نرم‌افزار چند منظوره ی اپن سورس و رایگان است که برای طراحی فلوچارت، یو ام ال، مدار و … مورد استفاده قرار می گیرد. این نرم‌افزار روی پلتفرم های گنو/لینوکس، مکینتاش و ویندوز قابل اجرا است که تحت مجوز GPL به بازار عرضه شده است.

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
The_secretمن یک کاربر مهمان هستم
واقن دمت گرم سکان اکادمی خیلی وقت بود منتظر یه همچین اموزش اصولیه باحالی بودم ... واقن سپاس
Nirvana
Nirvana
ممنون آغای دوشیری که با حوصله به سوال پاسخ دادین. کتاب آغای صدیقی رو دوستان توصیه کرده بودن که بخونم ولی زیاد ازش مطمین نبودم ولی حالا که شما تاییدش میکنین حتما تهیه میکنم . باز هم ممنون
Nirvana
Nirvana
تشکر آغای دوشیری از توضیحاتتون. مطلب رو به طور کلی متوجه شدم. در مورد Encapsulation یا به طور کلی چهار اصل برنامه نویسی شی گرایی مطلب یا کتاب جامعی اگه سراغ دارین ممنون میشم معرفی کنید یا لینک بدید یا میتونید ایمیل کنید. اگه فارسی باشه بهتر.تو سایتهای فارسی متاسفانه چیز زیادی در این مورد پیدا نمیشه. باز هم ممنون
Nirvana
Nirvana
سلام و خسته نباشید خدمت آموزگار محترم. قسمتی که در مورد +و - جلوی Attribute ها و Method ها توضیح دادین کمی نامفهومه.فرمودین که منفی ها بدین معنی هستند که صرفا از داخل این کلاس قابل رویت هستند و بقیه آبجکتها به آن دسترسی ندارند. این یعنی آبجکتهای خود آن کلاس هم به آن دسترسی ندارند یا اینکه فقط آبجکتهای کلاسهای دیگر که از این کلاس ارث بری میکنند به آن دسترسی ندارند. و اگر آبکتهای خود آن کلاس هم به آن دسترسی ندارند پس اصولا چرا تعریف شده اند؟ با تشکر
vahid
vahid
مثل همیشه عالی
امیر
امیر
سلام یک سوال برام پیش اومده ....
در مواردی که داخل uml کنار متد علامت منفی باشه به این معنی هستش که این متد از داخل کلاس فقط قابل رویت و دسترسی هستش خوب این کجا کاربرد داره ؟
بهتره این جوری بپرسم که یعنی منظور از دیده شدن یک متد همون بکارگیری اون متد هست ؟
بیزن
بیزن
سلام بزرگوار
در خط27 کلمه فعل اشتباهی فعال تایپ شده.