درود بسیار بر دوستان. بلاخره زمانش شد که بریم سراغ «یو.ام.ال» اما برای یاد گرفتن «یو.ام.ال» نخست باید مدلسازی شیءگرا رو بدونیم و برای اینکار باید تا اندازه ای (اونم اندازه ای زیاد) مدل و مدلسازی رو بدونیم که هر کدوم از اینها برای خودشون دنیایی دارن که بیا و ببین. من تلاش میکنم خیلی سه سوته بحث مدل و مدلسازی رو یه جوری ببندم که نه سیخ به فاک بره نه کباب تا برسیم به «یو.ا.م.ال». شاید فکر کنید که بحث مدل رو کاملا بلدید و خوندن این مقدمات کمکی بهتون نمیکنه اما من پیشنهاد میکنم به هیچ وجه ازش رد نشید. حتی اکر صد ساله دارین مدلسازی میکنین باز هم این بخش ها رو بخونید. اگر درک درستی از این مفاهیم پایه ای نداشته باشید چیزی از «یو.ام.ال» دستگیرتون نمیشه.
نرم افزار های ساده و نرم افزارهای پیچیده
تا زمانی که ندونیم مدل یعنی چی، نمیتونیم اهمیّت مدل و مدلسازی رو بفهمیم و «یو.ام.ال» برامون دست بالاش دیگه یه چیز بیخود و شیکِ که تنها بدرد «ای.بی.ام» و «سان» میخوره. اما حقیقت اینه که مدل برای همه مهمه حتی برای دانشجوهای ترم های پایین و برای کسانی که میخواند براستی مهندس بشن و نرم افزار بسازن بخشی از ابزار کار بشمار میاد. اما این مدل چی هست؟ خوب باید از کمی پیشتر آغاز کنیم. مثلا از اینجا: یه چیزایی هستن که ساختنشون آسونه و یک نفر به تنهایی و بدون نیاز به اندیشه و نوشتن و کشیدن و … میتونه کار رو انجام بده. برای نمونه نوشتن یک برنامه که بیاد آمار نخود و لوبیای توی آش کشک خاله رو از ورودی بگیره و در خروجی چاپ کنه که نفخ میکنیم یا نه دیگه طراحی نمیخواد! کسی هم قرار نیست فردا بیاد این شاهکار طراحی ما رو بخونه و توی شاتلهای «ناسا» هم نمیخوان ازش استفاده کنن که برنامه غذایی فضا نوردهاشون تو مریخ نفخ آور نباشه. گوگل هم هیچ حرفی نزده مبنی بر اینکه بیاد اسپانسرمون بشه که «گوگل آش» بزنیم ! درسته که اینا ریخت جک و فکاهی رو داره اما یک بار دیگه با دقت بخونید تا منظورم رو درست تر بگیرید. ولی همه نرم افزارهای دنیا اینجوری نیستن که، هستن؟ مثلا فکر کنید «مایکروسافت» بخواد بدون طراحی «ویندوز» بنویسه یا «سان» بیاد همینجوری کداً نَخَبری پلاتفرم جاوا بده بیرون. کاملا واضحه که اینا اینجوری کار نمیکنن. اونا هم فکر میکنن ، کد مینویسن، باگهاشون رو میگیرن و … اما یه تفاوت بزرگ با اون پروژه «آش» ما دارند و اونهم توی پیچیدگی نرم افزار هاشونه. «آش» یه چیز ساده است به این معنی که اجزای زیادی نداره، کارهای زیادی نمیکنه، اون یکی دو تا کاری که میکنه چیزهای خفنی نیستند، با سیستمهای دیگه ارتباط نداره، کلاینت و سرور نداره، قرار نیست تا ده سال دیگه روش کار بشه، با جون آدمها سر و کار ندراه و قرار نیست ترافیک هوایی رو کنترل کنه. اما« ویندوز» ،«آفیس» ،«گوگل کروم» ،«آی.بی.ام وب اسفیر» یا نرم افزاری که ترافیک هوایی رو مدیریت میکنه اینجوری نیستن. اونها نرم افزاری های پیچیده ای هستند چون قرار کارهای زیادی انجام بدن، قراره کارهای دشواری انجام بدن، با سیستمهای زیادی سر و کار دارن که خودشون کلی پیچیدگی دارن، با جون آدمها سر و کار دارن. بلادرنگ هستند و قرار تا ده سال آینده صد خروار کار روی اونها انجام بشه. راه و رسم ساختن نرم افزارهای ساده با نرم افزارهای پیچیده از ریشه تفاوت داره.
طراحی و نمودار بازی و «یو.ام.ال» و متودولوژی و اینجور دری وری ها توی ساخت نرم افزارهای پیچیده خودشون رو نشون میدند. اینکه میبینید مهندسین نرم افزار ما دو زار از «یو.ام.ال» و دیگر چیزها سر در نمیارند دلیلش اینه که بیشتر اونها حتی از دور هم در جریان کار یک نرم افزار پیچیده نبودند و بنابراین یو.ام.ال هم برایشون کاری نمیکنه.
اگر دقت کنید میبینید که سادگی و پیچیدگی اینجوری که من گفتم خیلی نسبی هستند. اون نرم افزار «آش» برای من و بامداد خیلی ساده است اما برای خواهر من و بامداد جزو شاهکارهای صنعت نرم افزار بشمار میاد و تردید ندارند که برای ساختنش از «سان» و «گوگل» مدیر پروژه آوردیم! از سوی دیگه برای من ساختن یک بازی دو بعدی کار خیلی پیچیده ای است اما برای «جان کارمک» (برنامه نویش ارشد شرکت «آی.دی») که توی کارنامه اش بازی هاتی سری «دوم» را داره قطعا کار چندان پیچیده ای نیست. منظورم اینه که درسته که یه نرم افزارهایی دیگه به اندازه ای بزرگ و خفن هستن که از نظر خدا هم پیچیده هستند اما برای من و شما پیچیدگی نرم افزار به خودمون بستگی داره و هر زمان مجبور شدیم برای یک نرم افزار اندیشه کنیم و طرحی بریزیم، بی تردید جزو نرم افزارهای پیچیده بشمار میاد. نتیجه میگیرم که شما در هر سطحی که باشین براتون خوبه که با روشهای اصولی و درست و درمون ساختن نرم افزار [های پیچیده] آشنا بشین و اونها رو بکار ببنیدن. مگه شما چند ترم میخواین «آش» بنویسین؟ چند وقت میخواین پروژه دانشجویی از این ور و اون کُپ بزنین ؟ خاک تو سرت! خجالت بکش! اصلا نمیخواد تو مدلینگ کنی، بیا برو از بلاگ من بیرون … اعصاب نمیذارن که … چی داشتم میبافتم؟ آها … در پایان دیر یا زود به جایی میرسید که دیگه با ده دقیقه ور رفتن با «ویژووال سی» نمیشه کار مشتری رو راه انداخت و اون وقت دیگه شما براستی پا گذاشتین توی دنیای نرم افزار که پُره از پیچیدگی هایی که برای مدیریت کردنشون به ابزار و مهارت نیاز دارید. اینجاست که میرسیم به مدل و مدلسازی.
مدل و مدلسازی
نخستین تفاوت «آش» با «ویژووال سی» اینه که «آش» هیچ طرح خاصی لازم نداره که بخوایم براش فکر کنیم یا توضیح دادنش سخت باشه اما «ویژوال سی» صدها بخش داره که خودشون کلی طرح دارن و طرح کلی خود «ویژووال سی» هم برای خودش طرحی بشمار میاد طرحستون! چه جوری طرح و نقشه نرم افزارتون رو بیان میکنید؟ به چه روشی، با چه زبونی و روی چه حسابی نکات کلیدی و مشخصات منطقی نرم افزارتون را برای دیگران که میتونند برنامه نویسهای تیم خودتون باشند یا در آینده برای بازخوانده شدن بدست خودتون شرح میدین ؟ حتی خودتون برای شفاف کردن ایده هاتون و آزمودن اونها و بهبود دادنشون یا نوشتن و رسم کردن طرح برنامه تون چی کار میکنید؟ گرفتاری اینجاست که طرح نرم افزار درون ذهن و اندیشه شماست و تنها شما بهش دسترسی دارین. کسی نمیتونه فکر شما رو بخونه یا با شما تله پاتی کنه تا بفهمه منظورتون چیه. حتی اگر تنها برنامه نویس پروژه خودتون هستید هم نمیتونید همه طرح رو یکجا در ذهنتون بیارید و تنها با تصاویر ذهنی روی طرح و پروژه کارکنید. دیگه نگهداری و تغییردادن طرح در آینده که بماند. بنابراین طرح (اون ایده ای که در ذهن شماست) باید در جایی بیرون از ذهن شما نوشته یا رسم بشه و دیگران (که ممکنه فردا خودتون باشید) بتونند با خوندن اون نوشته یا دیدن اون ترسیمات طرحی که میخواین بیان کنید رو بفهمند. به این نوشته ها یا ترسیمات میگن مدل. مدل هر چیزیه که طرحی یا ایده رو بیان کنه. مدل میتونه نوشتاری باشه. شما میتونید طرحتون رو بنویسید یا میتونه گرافیکی باشه که در این صورت شما میتونید چندین صفحه نوشته رو یکجا و با چند تا مربع و دایره و خط و لوزی به بیننده منتقل کنید. بنابراین نخستین کار یک مدل نمایش دادن ایده و طرحی یه که در ذهن دارید. اگر مدل همین یک کار رو میکرد هم کافی بود که همه مدلسازی کنند اما کار مدل تنها به بیان ایده ها ختم نمیشه. هیچ کس تا زمانی که طرحی رو درست نفهمیده اون رو اجرا نمیکنه. اگر توهم زدین که طرحتون رو تا خرتناق (یعنی تهش) میفهمید باید خدمتتون عرض کنم که ریدی برادر. چرا؟ آها! وردار طرحتو بکش یا جون بکن برای یکی توضیحش بده تا حالیت کنم که یه من کد چند خط کامنت داره! هیچ طرحی پیش از آزموده شدن در مراحل نخستین و پذیرفته شدن در اون آزمون ها وارد فاز پیاده سازی نمیشه و هیچکس هم نمیتونه هیچ طرح و ایده ای رو بدون مدل کردن آزمایش کنه. اینجا هم اگر خیالات ورت داشته که طرحت توپّه و هیچ ایرادی نداره باز باید خدمتت عرض کنم که مجددا به همون استیل سابق ریدی. وردار مدلشو دربیار و بعد بشین اثبات مفهوم کن تا دستت یاید کجای کار گیر و گرفتاری داره. به قول عمو «پرسمن» که همیشه سر کلاسهاش میگفت: هنوز دیزاین نکردین که کدینگ یادتون بره! حالا من میگم هنوز مدلینگ نکردی که جفتش یادت بره! خلاصه بدون مدل هیچ کار مهمی نمیشه روی یک طرح انجام داد. ذهن آدم به تنهایی و بدون مدل خیلی ضعیف تر از اونیه که بتونه این کارها رو انجام بده برای همینه که مدل بجز بیان کردن طرح کاربردهای بسیار مهم دیگری هم داره. مدل برای آزمودن طرح ، کار کردن روی طرح (تیمی یا انفرادی) و اجرایی کردنش هم بکار میره. یعنی راستش رو بخواهید اصلا راه دیگه ای نداره (اصرار نکن که دوستی مون بهم میخوره) . هیچ طرحی از اول کامل و بی کاستی نیست. روی هیچ طرحی نمیشه هیچ کاری کرد مگر مدلی داشته باشه که اون طرح رو بیان کنه. درسته که طرح و ایده شما خیلی خوبه (بشنو و باور نکن) اما بدون مدلی که اون طرح رو نشون بده و بشه روش کار کرد اون طرح به جایی نمیرسه (تازه با مدل هم به هیچ جا نمیرسه چون مشکل ما ژنتیکیه اما دست کم یه غلطی کردیم غیر از زر زدن!). مدل وادارتون میکنه به طرحتون بیشتر اندیشه کنید. یه چیزایی رو ببینید که تابحال نمیدیدید. مدل به شما امکان میده طرحتون رو تغییر بدید و اون رو از یک چیز ذهنی برسونید به یک نرم افزار اجرا شدنی. چیزی که میخوام بگم اینه که مدل تنها یک مشت خط و پیتک نیست که طرح و ایده شما رو برای ملت همیشه در (پشت) صحنه شرح میده. مدل یک بخشی از توانایی های ذهنیتونه که اومده روی کاغذ و شکل و ریخت نوشتاری یا ترسیمی پیدا کرده و همین کار ساده باعث میشه که شما بتونید هزار تا کار دیگه با اون طرح و ایده (که حالا دیگه مدل داره) بکنید (اوه اوه چی گفتم! دمم گرم!) . کارهایی که برای ساختن نرم افزار لازم هستن و هیچ راه دیگری هم برای انجام دادنشون نیست به جز از راه مدل. خب دیگه تا روی مدل زیاد نشده و مدلساز ها فردا اینجا صف نکشیدن این درس رو به پایان میریم.
- یو.ام.ال. : زبان مدلسازی یکچارچه
- مدل : Model
- مدلسازی : Modeling
- مدلساز : Modeler
- طرح : Design
- طراح : Designer
- نمودار : Chart, Diagram
- مدل نوشتاری : Textual Model
- مدل گرافیکی : Graphical Model
- مدل دیداری : Visual Model
- پیچیدگی : Complexity
- سادگی : Simplicity
عالي، Best، دستت درست، مطالب خيلي باحاله …
بازم از این مطالب خواهیم داشت
جز تو کسی نمی تونه یه همچین چیزه باحالی بنویسه
یه دونه ای . تکی . از بیست اونور تر ی. 40ی . 50ی . 60ی .
مای مرسی. هول کردم مامانم اینا
هووووووی درس دوم چی شد ؟ دقت کردی تمومه آپ ها رو درس نخست قفلیده ؟
ا ا ا ببخشید داش اشکان حواصم نبود اینجا تشریف دارین .
می نویسم بابا چرا میزنی !!!!
قسمت دوم ریسک چی شد ؟؟؟؟؟؟؟؟ D:
بابا مینویسم ! دهن منو صاف کردی علی