زمان انتشار نشریه الکترونیکی شیءگرايی مدار

  • یوسف مهرداد بی‌بالان

ديروز با آقای مهندس هادی تا دير وقت جلسه داشتيم و موضوع جلسه ما چيزی نبود جز نشريه شیءگرايی مدار.
خلاصه‌ای از مباحث مطرح شده در جلسه را در اين جا آورده‌ام.
ايده آقای مهندس هادی اين بود که مانند MSDN Magazine، نشريه دارای ستون‌های ثابتی باشد که هر ماه، مطالبی در آن آورده می‌شود، در کنار آن، هر شماره را به يک موضوع ويژه اختصاص دهيم و مطالبی در راستای موضوع، افزون بر ستون‌های ثابت ارائه دهیم.
بخش‌های ثابت پيشنهادی نشريه به قرار زير هستند:

  • مفاهيم شیءگرا (Object Orientation Concepts)
  • طراحی و معماری (Software Design and Architecture)
  • متدولوژی (Software Process or Methodology)
  • NET.
  • J2EE
  • معرفی کتاب
  • مصاحبه‌ها

(اگر شما هم ايده‌ای داريد، من را مطلع نماييد)

هم چنين موضوعات ويژه پيشنهادی نشريه نيز به شرح ذيل می‌باشند:

  • کاربردهای الگوهای طراحی (Using Design Pattern)
  • Code Generation
  • Agile Methodology
  • بومی‌سازی RUP
  • Requirements

نسخه اول نشريه با موضوع ويژه کاربردهای الگوهای طراحی انتشار پيدا خواهد کرد.

(شما هم می‌توانيد ليست را کامل يا الويت‌بندی نماييد)

در مورد زمان انتشار نشريه نيز مشورت کرديم و توافقات زير حاصل گرديد.
قرار شد تا تاريخ 10 آبان، شماره صفر نشريه انتشار يابد که در آن سخن سردبير و نيز توضيحات مسئول هر بخش درباره محتوای آن، ارائه گردد.
مطالب شماره نخست نشريه تا تاريخ 20 آبان گردآوری خواهد گردد و در اول آذر، اولين شماره نشريه انتشار پيدا خواهد کرد.

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

 

مبانی فرآيندهای مدرن توليد نرم‌افزار

  • یوسف مهرداد بی‌بالان

روزهای پنج‌شنبه و جمعه از بهترين روزهای هفته است. چرا که شرکت تعطيل است و شما می‌توانيد کارهای عقب افتاده يا کارهای مورد علاقه‌تان را که در قالب کارهای شرکت نمی‌گنجد، انجام دهيد. البته جمعه‌ها، روز خانواده است، ولی من بعضی اوقات، از کوپن خانواده نيز خرج می‌کنم. ناگفته خود پيداست که کلمه “بعضی” در “بعضی اوقات” وابسته به موضوع و از بین صفر تا صد قابل تغيير می‌باشد و اين تعریف به تأييد تمامی دوستان متأهل نیز رسیده است.
از شوخی که بگذريم، خانم مطهريان تقبل زحمت نموده‌اند و نکات درس تحليل و طراحی شیءگرا را مدون کرده‌اند. از همين فرصت استفاده می‌کنم و از خانم حميده مطهريان صميمانه تشکر و قدردانی می‌نمایم.
داشتم متن آماده شده را به يک قالب استاندارد منتقل می‌کردم تا در اسرع وقت! به ويرايش و ويراستاری آن بپردازم. با خود گفتم که اگر بعضی از مطالب را در اين جا بازگو نمايم، هم برای خوانندگان مفيد خواهد بود و هم امکان دريافت نظرات و نقدهای خوانندگان وبلاگ برايمان مقدور خواهد شد.

موضوع اولی که می‌خواهم مطرح کنم در مورد فرآيندهای مدرت توليد نرم‌افزار است. اين فرآيندها، دارای پنج اصل پايه به شرح ذيل می‌باشند:

  • معماری مقدم بر همه چيز — المان طراحی مرکزی
  • استفاده از روشهای تکراری و افزايشی — المان مديريت ریسک
  • تأکيد بر توسعه مبتنی بر مولفه — المان تکنولوژی
  • فراهم‌سازی محيطی برای مديريت تغييرات — المان کنترل
  • افزايش آزادی عمل در اعمال تغييرات با استفاده از ابزارهای دوطرفه(round trip) — المان اتوماسيون

البته بايد يادآور شوم که مبانی فرآيندهای مدرن شامل ده مورد می‌باشد که پنج مورد آنها در قالب اصول و پنج مورد ديگر در قالب فروع دسته‌بندی شده‌اند. ما در اينجا تنها به اصول فرآيندهای توليد نرم‌افزار اشاره کرده‌ایم.
نکته حائز اهميت و شالوده اين مطلب اين است که شما با هر روشی که کار می‌کنيد، فارغ از هر اسم و نشانه، بايد سعی کنيد اين اصول را در روش توليد خود به کار گيريد، که اگر چنين مهمی به وقوع بپيوندد، مسلماً شما مبتنی بر يک فرآيند نوين مبادرت به توليد و توسعه نرم‌افزار نموده‌ايد.

RUP بهتر است يا Agile؟

  • یوسف مهرداد بی‌بالان

امروز يکی از دوستان خوبم زنگ زد و گفت که RUP بهتر است یا Agile؟اين سوال بهانه‌ای شد تا نوشته زير را آماده کنم.
واقعيت امر اين است که فرآيندها و متدولوژی‌های توليد نرم‌افزار هر يک دارای نکات مثبت و منفی خاص خود هستند و هر کدام با شرايطی، می‌توانند تجارب ديگران به ما منتقل نمايند تا ما چرخ را دوباره اختراع نکنيم و از ياد نبريم که نبايد مسخ آنها شويم و خلاقيت‌مان را ناديده گرفته و خودباوری‌مان را از دست بدهيم. اما مشکل عمده ما در ايران اين است که خيلی مدگرا هستيم و دانسته‌های ما “ناشی از شنيده‌ها و برداشتهای شخصی است” [اين جمله مال من نيست] و نه بر اساس تجربه و مطالعه.
من در معرفی يکی از دوره‌هايم متنی را آماده کردم که فکر کنم بد نباشد آن را اينجا بياورم:

“در جامعه نرم‌افزاری، هر از چند گاهی، تکنولوژی يا روشی مد روز می‌شود و اين جامعة ذاتاً نوگرا را چون جاذبه‌های عجيب به سمت خود می­‌کشاند، بدون آن که لزوم استفاده و مفاهيم بنيادی آن به اين جامعه منتقل گردد، مدتی به کار گرفته می­‌شود و پس از مدتی به دلايل مختلف از مد خارج شده و با مدی ديگر جايگزين می­‌گردد. يکی از مهم‌ترين دلايلی که باعث از مد خارج شدن اين ابزارها می‌گردد، برداشت نادرستی است که علاقمندان و استفاده‌کنندگان از آن‌ها دارند و دليل ديگر، کاربری نادرست آن‌ها در کنار بی‌تجربگی استفاده‌کنندگان و مهم‌­تر از همه عدم وجود توانمندی لازم جهت ساده‌سازی و بومی‌سازی آن‌ها می‌باشد.
RUP نيز از اين قاعده مستثنی نيست. فرآيند توليد يکپارچه شرکت IBM به دلايل مختلفی در جامعه نرم‌افزاری مد شد و به دلايلی که بخشی از آن را برشمرديم، از مد روز خارج شد، بدون آن که فلسفه و نگرش اين فرآيند به کاربران آن منتقل شود.

هدف اين نيست که از اين فرآيند دفاع نماييم و آن را معجزه قرن بيست و يکم بناميم، بلکه نکته‌ای که بدان پافشاری می‌نماييم اين است که فلسفه و نگرش درون RUP نشأت گرفته از تمامی روش‌هايی بوده است که تا آن زمان ظهور کرده‌­اند و هر يک به طريقی سعی در حل مشکلات توليد نرم‌­افزار داشته­‌اند. فارغ از اين که اين نام چه باشد – FDD،RUP، ICONIX، Agile، XP – آن چه که جامعه نرم‌­افزاری بايد فرابگيرد، فلسفه و نگرش و تکنيک‌هايی است که در اين روش‌ها به صورت ضمنی وجود دارد.”

به عنوان مثال مفهوم معماری. در روش‌های مدرن، معماری به عنوان يکی از مبانی اصلی شمرده می‌شود (the architecture is first). با اين که همه در کوی و برزن اين نام را بر سر زبان می‌آورند، واقعاً به اندازه انگشتان يک دست نمی‌توانيد متخصصينی را پيدا کنيد که اين مفهوم را لمس کرده باشند و نه آن که جملات کتاب‌ها را از بر برايتان بخوانند.

من جايی درس می‌دادم (اين موضوع مربوط به خيلی سال پيش است) و شروع به تدریس مفهوم معماری، اهميت و کاربردهايش کردم. انتهای جلسه، يکی از حاضران گفت: استاد ببخشيد، من تا قبل از جلسه امروز می‌خواستم يک طراح شوم، از همين الان تصميم گرفته‌ام که يک معمار شوم ما بيشتر به اسامی و القاب علاقه‌منديم تا نکته مطلب.

يا مفهوم روش‌های تکراری-افزايشی. يکی از دوستان عزيزم که ديگر اکنون در ايران نيست، می‌گفت من پس از سال‌ها پروژه خراب کردن! فهميدم که مفهوم و هدف از روش‌های تکراری-افزايشی چيست. بعد همه ادعای استفاده از اين تکنيک را دارند و وقتی خوب دقت می‌کنيد می‌بينيد روش‌های آبشاری را تحت نام‌های مدرن در حال انجام هستند. وحشتناک‌تر آن که بی‌دانشی و بی‌تجربگی باعث شده خيلی‌ها فکر کنند که RUP مجموعه مستندات است و آن را با کتاب‌های آيين نگارش اشتباه می‌گيرند.
سخن قشنگ ديگری که از همه می‌شنويد اين است که RUP برای پروژه‌های بزرگ است. حتی اين جمله هم ناشی از مطالعه نکردن و بی‌اطلاعی و تحت تأثير شنيده‌ها بودن است.

هفته پيش من جايی بودم و در مورد پروژه‌ای مشاوره می‌دادم. تأکيد من بر اين بود که می‌شود سيستم را بدون بازنويسی، با Refactoring در سطح مطلوبی بازسازی کرد. يکی از دوستان که در جلسه بود گفت: فکر می‌کردم که شما به جای RUP متمايل به XP method شده‌ايد و من هم هاج واج نگاه به همکارم کردم. تأکيد من برگرفته از تجربه و نيز تکنيکی بود که در يکی از روش‌ها تجربه کرده بودم و نه اينکه علاقه‌ای به اسامی داشته باشم.

سالها علاقه من بررسی و به کارگيری تکنيک‌هايی است که در متدولوژی‌های مختلف وجود داشته و هميشه اين موضوع ناراحتم می‌کند که چرا ما که درياهاي به عمق يک سانت (شايد کمتر) هستيم، درباره اين موضوعات مطالعه نمی‌کنيم و چرا بدون مطالعه به خودمان اجازه اظهار نظرهای عجيب و غريب می‌دهيم.

سخن آخر:بر اساس خصوصيات پروژه، محيط انجام، تيم توليد و چندين پارامتر ديگر شما روش انجام کارتان را بايد انتخاب کنيد، مهم نيست که اسمش چه باشد. با مطالعه از تجربه ديگران در حوزه متدولوژی آشنا شويد و اين مطالعات کمک می‌کند تا تفکرتان را نسبت به توليد نرم‌افزار عوض کنيد.

اگر به موضوع تفاوت متدولوژی از ديدگاه کاربردی علاقمند هستيد پيشنهاد می‌کنيم که حتما مقاله The New Methodoloyرا از آقای مارتین فولر مطالعه نمایید.

رقبای نشريه شیءگرايی مدار

  • یوسف مهرداد بی‌بالان

ديشب بخشی از مقالات شماره نخستين نشريه را انتخاب کردم و امروز در اختيار خانم مهندس بزرگی قرار دادم تا زحمت قرار دادن آن در نشريه و انجام کارهاي لازم (به اصطلاح فنی: چرخه نشر)تا مرحله انتشار را انجام دهند.
خانم مهندس که از توسعه‌دهندگان نرم‌افزار نشريه هستند از بس پی‌گير و متعهداند که من به دليل کندی انتخاب مقالات، واقعاً شرمنده ايشان می‌شوم.
امروز آقای مهندس هادی که از اعضای تحريريه نشريه هستند، سراغ مقالات انتخاب شده و نيز زمان انتشار نشريه را می‌گرفتند. انشاءالله تاريخ انتشار اولين شماره نشريه شیءگرايی مدار به زودی اعلام خواهد شد.
از افتخارات نشريه هم اينکه نيوشا که علاوه بر پشتکار و علاقه و شاگرد اولی دانشگاه، تجربه خبرنگاری دارند، قبول زحمت کردند و برای همکاری با نشريه اعلام همکاری نموده‌اند. از ايشان بسيار سپاس‌گزارم.

با خانم دکتر تقی‌ياره که بنده افتخار شاگردی‌شان را دارم، صحبت کردم و ايشان با همه مشغله‌شان در دانشگاه تهران، قبول زحمت فرمودند تا ليست مقالاتی را که دانشجويانشان در دروس CRM و ITM کارشناسی ارشد ارائه می‌دهند، پس از ارزيابی در اختيار ما قرار دهند تا در دو نشريه مستقل به همين نام‌ها منتشر گردد. دست خانم دکتر درد نکند.

با آقای مهندس عسگری هم صحبتی داشتيم و ايشان هم پيشنهاد انتشار نشريه‌ای در زمينه مهندسی صنايع داشتند و من هم استقبال کردم. قرار شد ايشان مديريت اين کار را به عهده بگيرند.
اميدوارم اثربخشی‌اش اين کارها هر چه زودتر همه ما را خوشحال و راضی نمايد.

با نشرياتی که اسامی آنها را عرض کردم به نظر می‌رسد که نشريه شیءگرايی مدار با رقبای جدی و سرسختی روبرو است.

عناوين مقالات نشريه شیءگرايی مدار

  • یوسف مهرداد بی‌بالان

با آقای مهندس هادی عناوين مطالبی را که می‌تواند در نشريه قرار داده شود، تهيه کرديم. خيلی وارد جزئيات نشديم و کليات را آماده کرده‌ايم که در ادامه آن را خواهيد ديد.
اگر نظری در اين مورد داريد، لطفاً مرا مطلع نماييد تا آن راتکمیل کنم.

  • مفاهيم
    • مفاهيم شیءگرا
    • پارادايم شیءگرا
  • مدلسازی
    • UML 1.x
    • UML 2.0
  • نيازمندی‌ها
  • تحليل
  • طراحی
    • الگوهای طراحی
  • پياده‌سازی
    • Refactoring
  • متدولوژی
    • RUP
    • Agile
  • تکنولوژی
    • Java
    • NET.
  • ابزارها
  • بانک اطلاعاتی
    • OR Mapping
    • OR Mapper
  • واسط کاربر
  • معماری
    • الگوهای معماری
    • ..
  • جنبه‌گرایی(Aspect Orientation)

نشریه شیءگرايی مدار

  • یوسف مهرداد بی‌بالان

در پی توافقی که با مديرعامل شرکت و دست‌اندرکاران نشريه الکترونيک شرکت مدار گسترش (http://itorbit.net/issue/issueuser)انجام دادم، تصمیم گرفتم که نشريه‌ای را با استفاده از اين نرم‌افزار منتشر نمايم.
ایده اولیه این است که نشريه در مورد موضوعات مختلف مهندسی نرم‌افزار مبتنی بر شیءگرايی باشد و نيز مطالب آن را از مطالب داخلی منتشر شده يا مقالات معتبرخارجی فراهم شود. نشريه دارای سردبیر،هيأت تحريريه و داورانی باشد که مقالات ارسالی را داوری نموده و از طرف ديگر نويسندگانی که مطالب نشريه را تهيه و ارسال نمايند. همچنين بتوان برای ارسال نشريات عضوگيری نمود و پس از انتشار نشريه، آن را برای اعضا ارسال نمود.
در صورتی که برای نام نشريه و نيز نحوه ارائه مطالب آن ايده‌ و نظری داريد، لطفاً آن را با من در ميان بگذاريد.

همچنین اگر علاقمند هستید که در این کار مشارکت نمایید، بسم الله. نشریه با آغوش باز پذیرای شما خوبان است.

منتظر دريافت اعلام مشارکت، مطالب و راهنمايی‌های شما هستم.

تجريد (Abstraction) چيست؟

  • یوسف مهرداد بی‌بالان

دوست خوبم آقای احمد حسينيان در نامه‌ای از من خواسته بودند تا در مورد تجريد که يکی از اصول شیءگرایی محسوب می‌گردد، مراجعی را برايشان ارسال نمايم. من هم فرصت را غنيمت شمردم و توضيحاتی در اين مورد نوشتم که در ذيل می‌آيد.

تجريد در تعريف عبارت است از برجسته‌سازی جزييات و مشخصاتی از يک موضوع(سيستم، شیء، و…) که برای خواننده مهم بوده و حذف ساير جزييات و مشخصات آن موضوع.
دقت شود که در زبان انگليسی کلمه Abstraction همه به معنای عمل تجريدسازی موضوع(به عنوان مثال روشی که‌‎به‌شناخت‌شیء دانشجو در سيستم آموزش منجر می‌گردد) و هم به معنای خود موضوع (به عنوان مثال دانشجو) به کار گرفته می‌شود.

اما چرا به مفهومی به نام تجريد نياز داريم؟
جواب آن ساده است. به دليل ضعف انسان در برخورد با سيستم‌های پيچيده. از آنجا که ذهن ما قدرت پردازش سيستمی مانند آموزش و کلاً جهان واقعی‌را به صورت يک جا ندارد، سعی می‌کنيم آن را با استفاده از تجريدسازی‌ شناسایی کنيم. توجه به اينکه ضروری است که مفهوم تجريدسازی در هر ابعادی توسط انسان به کار گرفته می‌شود (مفهوم سطوح تجريد). به عنوان مثال در مورد تجريدی مانند دانشجو نیز بسته به خواننده آن، بعضی از مشخصات و جزييات دانشجو در فرآيند تجريدسازی حذف می‌گردد(مثلاْ در نظر گرفتن ویژگی‌ “نام پدر بزرگ” در سیستم آموزش).
بهترين تجريد، تجريدی است که تمامی مشخصات و جزييات لازم خواننده را در برگرفته باشد و مشخصات و جزيياتی که خواننده نيازی به آن ندارد، در آن حذف شده باشد.

در شناخت انسان از محیط پیرامون خودنيز اين اصل به خوبی نمايانگر است. وقتی يک روانشناس در مورد يک فيلم صحبت می‌کند، صرف‌نظر از تمامی خصوصيت‌های فيلم، به جزييات و نکات روانشناسی فيلم توجه می‌کند و در مورد آنها سخن می‌گويد. در حالی که يک بازيگر به تکنيک‌های بازيگری آن توجه نموده و آنها را مد نظر قرار می‌دهد. در حالی که فيلم در برگيرنده همه اين‌هاست.
در تحليل سيستمها نيز ما با اين مسأله روبرو هستيم. يک دانشجو دارای مشخصات و جزييات فراوانی است و بسته به نوع سیستم (خواننده)، مشخصات آن متفاوت خواهد بود. در حالی که در حوزه سيستم آموزش، دانشجو دارای مشخصاتی مانند دروس پاس شده، معدل و … می‌باشد، در حوزه سيستم رفاه (مثلاً وام ازدواج ) مشخصات ديگری مانند محل سکونت، نوع تأهل و … را برای دانشجو متصور می‌شويم.

اما ما به تنهايی و با ديدگاه تجريد نمی‌توانيم به جنگ پيچيدگی برويم. به ابزارهای ديگری نيز نياز داريم. آيا می‌دانيد اين ابزارها چه هستند؟ خوشحال می‌شوم نظرتان را اعلام نماييد.

آدرس يک صفحه وبی که در آن نويسنده تعاريف مختلف تجريد را گردآوری کرده است را نيز برای شما در زير آورده‌ام.

http://www.itmweb.com/essay550.htm

برای خروج از جستجو کلید ESC را بفشارید