انجمن متخصصان
بازگشت   انجمن متخصصان > انجمنهای برنامه نویسی > طراحی نرم افزار و مدیریت پروژه UML CVS SubVersion
بازنگری این صفحه متد Object-Oriented (شی گرایی)
طراحی نرم افزار و مدیریت پروژه UML CVS SubVersion طراحی نرم افزار و مدیریت پروژه و نرم افزارهای مرتبط....

پاسخ
 
LinkBack ابزارهای موضوع نحوه نمایش
(#1 (permalink))
قدیمی
webramz آواتار ها
مدیریت انجمنها
Rep Power: 6
webramz is on a distinguished road
 
نوشته ها: 673
تاریخ عضویت: Jul 2006
محل سکونت: Tehran
Lightbulb متد Object-Oriented (شی گرایی) - 08-22-2006, 04:28 PM

شی گرایی لغتی است که امروزه در صنعت نرم افزار، باب شده است. شرکتها به سرعت حرکت می کنند تا خود را با این تکنولوژی جدید سازگار کنند و آن را در برنامه های موجود خود وارد نمایند . در حقیقت ، بیشتر برنامه ها امروزه با شی گرایی توسعه می یابند. اما شی گرایی به چه معناست؟؟

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

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

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

تفاوت متد شی گرایی با روش سنتی توسعه، چیست؟

در روش سنتی، روش توسعه به همراه اطلاعاتی که سیستم نگهداری خواهد کرد به خودمان وابسته است.
در این روش، ما از کاربران می پرسیم که چه اطلاعاتی را نیاز دارند، پایگاه داده ای را طراحی می کنیم که اطلاعات را نگه دارد، صفحاتی را تهیه می کنیم تا اطلاعات را بگیرد، و گزارشاتی را چاپ می کنیم تا اطلاعات را برای کاربر نمایش دهد. بعبارت دیگر، ما برروی اطلاعات متمرکز می شویم و کمتر توجه می کنیم که چه کاری با این اطلاعات انجام شده است یا رفتار سیستم چگونه است. این روش data-centric (مبتنی بر داده) نامیده شده است. و برای ایجاد هزاران سیستم در سال، ایجاد شده است.

مدلسازی Data-centric مخصوص طراحی پایگاه داده و گرفتن اطلاعات خیلی مهم می باشد، اما انتخاب این روش در زمان طراحی برنامه های تجاری با مشکلاتی همراه است. یک چالش بزرگ این است که درخواستهای سیستم چندین بار تغییر خواهند کرد. سیستمی که از روش data-centric استفاده می نماید، می تواند به آسانی تغییر در پایگاه داده را مدیریت نماید. اما اجرای تغییرات در قوانین تجاری یا رفتار (behavior) سیستم آن قدر آسان نمی باشد.

متد شی گرایی در پاسخ به این مشکل ، ایجاد شده است. با متد شی گرایی هم بر اطلاعات و هم بر رفتار متمرکز می شویم. در نتیجه اکنون می توانیم سیستم هایی را ایجاد نماییم که انعطاف پذیر شده اند تا اطلاعات و یا رفتار را تغییر دهند.
مزیت این انعطاف پذیری با طراحی یک سیستم شی گرایی بخوبی شناخته شده است. برای درک بهتر این مطلب نیاز به شناخت مفاهیم زیر هم هست که به تدریج آنها را شرح می دهیم:
  • نهان سازی
  • وراثت
  • چندریختی
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
پاسخ با نقل قول
(#2 (permalink))
قدیمی
webramz آواتار ها
مدیریت انجمنها
Rep Power: 6
webramz is on a distinguished road
 
نوشته ها: 673
تاریخ عضویت: Jul 2006
محل سکونت: Tehran
Arrow نهان سازی Encapsulation - 08-30-2006, 12:44 PM

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

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

حال بیایید با هم ایده نهان سازی را در سیستم بانکی به کار ببریم. اخیرا مدیریت بانک تصمیم گرفته است که اگر مشتری در بانک یک حساب اعتباری دارد، بتوان از حساب اعتباری بعنوان یک مبلغ اضافه، برداشت کرده و برای حساب جاری آنها استفاده نمود.
در یک سیستم غیر نهان سازی، کار را با یک روش اجباری شروع می کنیم تا تجزیه و تحلیل کاراتر شود.
  • اساسا ما محل تمام جاهایی که از عملیات برداشت از حساب، درسیستم استفاده شده است را نمی دانیم، بنابراین باید به هر جایی نگاه کنیم و وقتی که آن را پیدا کردیم، باید یک سری تغییرات را ایجاد کنیم تا این درخواست جدید را یکپارچه نماییم. اگر واقعا کار را بدرستی انجام شده باشد، احتمالا 80% موارد برداشت از حساب را در سیستم پیدا کرده ایم.
  • با یک سیسستم نهان سازی، ما نیازی به استفاده از روش اجباری برای تجزیه و تحلیل نداریم. ما به مدل سیستم خود نگاه می کنیم و به آُسانی جایی که رویداد برداشت از حساب پنهان شده بود را پیدا می کنیم. بعد از اینکه عملیات را در حساب قرار داده ایم، یکبار درخواستمان را فقط در آن آبجکت تغییر می دهیم ، و کار ما تمام شده است. بنابراین فقط کلاس Account نیاز به تغییر دارد.
یک مفهوم مشابه نهان سازی (پنهان سازی اطلاعات) می باشد. پنهان سازی اطلاعات، توانایی است که جزئیات مبهم یک آبجکت را از دنیای خارج پنهان می نماید. در یک آبجکت، دنیای خارج به معنی هر چیزی خارج از همان آبجکت است حتی اگر چه دنیای خارج شامل بقیه سیستم باشد. پنهان سازی اطلاعات همان مزیت نهان سازی را فراهم می کند: یعنی
انعطاف پذیری
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
پاسخ با نقل قول
(#3 (permalink))
قدیمی
webramz آواتار ها
مدیریت انجمنها
Rep Power: 6
webramz is on a distinguished road
 
نوشته ها: 673
تاریخ عضویت: Jul 2006
محل سکونت: Tehran
پیش فرض وراثت Inheritance - 08-31-2006, 01:13 PM

وراثت دومین مفهوم اساسی شی گرایی است. در سیستم های شی گرا وراثت به شما اجازه میدهد تا آبجکت های جدید را بر پایه آبجکت های قدیمی ایجاد کنید. آبجکت فرزند ویژگیهای یک آبجکت والد را به ارث می برد. شما می توانید نمونه هایی از وراثت را در دنیای طبیعی ببینید. هزاران نوع از پستانداران مانند سگها، گربه ها، انسانها، نهنگهاو ... وجود دارند.
هر یک از اینها ویژگیهای مشخصی دارند که منحصر به فرد بوده و این ویژگیهای مشخص مانند داشتن مو، خونگرم بودن و غذادادن به بچه ها، درکل گروه مشترک می باشند.
در اصطلاحات شی گرایی، یک آّجکت بنام پستاندار وجود دارد که ویژگیهای مشترک را نگه می دارد. این آبجکت والد آبجکت های فرزندی مانند سگ، گربه، انسان، و نهنگ و ... می باشد.
آبجکت سگ ویژگیهای آبجکت پستاندار را به ارث می برد، مانند دویدن در حلقه ها و ریختن آب از لب و لوچه. متد شی گرایی ایده وراثت را از دنیای طبیعی گرفته است.
بنابراین ما می توانیم همان مفهوم را در سیستم خود بکار ببریم.
یکی از مزایای اصلی وراثت، سهولت در نگهداری است. وقتی چیزی تغییر می کند و بر همه پستانداران اثر می گذارد، فقط آبجکت والد نیاز به تغییر دارد و آبجکت های فرزندبطور خودکار تغییرات را به ارث می برند.
مثلا اگر پستانداران بطور ناگهانی خونسرد شوند، فقط آبجکت پستاندار باید تغییر نماید.
سگ، گربه، انسان و دیگر آبجکت های فرزند بطور خودکار ویژگی جدید خونسرد بودن پستانداران را به ارث می برند. در یک سیستم شی گرا یک مثال برای وراثت می تواند پنجره ها باشند.
سیستمی بزرگ دارای 125 تابلو داریم. روزی، یک مشتری درخواست یک پیغام انصراف برروی همه تابلو ها را می دهد. در یک سیستم بدون وراثت، ما کار خسته کننده ای داریم که باید به هر یک از این 125 تابلو رفته و تغییر را در آن ایجاد کنیم. اگر سیستم ما شی گرا باشد، ماهمه تابلوها را از یک والد مشترک به ارث می بریم، بنابراین فقط نیاز داریم تا به آّبجکت والد رفته و یکبار آن راتغییر دهیم. همه تابلوها بطور خودکار تغییرات را به ارث می برند.

ویرایش توسط webramz : 08-31-2006 در ساعت 01:25 PM.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
پاسخ با نقل قول
(#4 (permalink))
قدیمی
webramz آواتار ها
مدیریت انجمنها
Rep Power: 6
webramz is on a distinguished road
 
نوشته ها: 673
تاریخ عضویت: Jul 2006
محل سکونت: Tehran
Cool چند ریختی Polymorphism - 09-02-2006, 11:54 AM

سومین اصل شی گرایی Polymorphism است . در فرهنگ لغت بعنوان پیدایش شکلهای مختلف، نواحی یاانواع مختلف تعریف شده است. چند ریختی به این معنی است که شکلها یا پیامدهای زیادی از یک تابع ویژه داشته باشیم. همانند وراثت، چند ریختی نیز در دنیای طبیعی دیده می شود. در فرمان یاعمل صحبت کردن ممکن است یک انسان جواب دهد -شما چه طورید-، سگ شاید پاسخ دهد -واق واق- گربه ممکن است پاسخ دهد-میو-.

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



کد:
Function shape.drawMe()
کد:
{ CASE shape.Type Case"Circle" shape.drawCircle(); Case "Rectangle" shape.drawRectangle(); Case "Line" shape.drawLine(); END CASE }
با چند ریختی، کد draw باید توسط تابع drawme() برای آبجکت طراحی شده فراخوانی شود. مانند این مثال:
کد:
Function draw()
{
  shape.drawMe();
}
هر شکل دایره، خط، مستطیل و غیره باید تابع drawMe() را داشته باشد تا شکل بخصوصی را بکشد. یکی از مزایای چند ریختی مانند دیگر اصول شی گرایی، سهولت نگهداری است.
زمانی که لازم است تا برنامه یک مثلث را رسم نماید، چه اتفاقی می افتد؟ در موردی که از چند ریختی استفاده نشده است یک تابع drawTriangle جدید به آبجکت shape اضافه شده است. همچنین تابع drawMe() آبجکت shape تغییر کرده است تا با نوع جدید شکل سازگار شود. با چند ریختی ما یک آبجکت tringle مثلث جدید را درون تابع drawMe() ایجاد می کنیم تا خودش را رسم نماید. تابع draw() که عملگرهای طراحی را اجرا می نماید اصلا نباید تغییر کند.

ویرایش توسط webramz : 09-02-2006 در ساعت 01:09 PM.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
پاسخ با نقل قول
(#5 (permalink))
قدیمی
webramz آواتار ها
مدیریت انجمنها
Rep Power: 6
webramz is on a distinguished road
 
نوشته ها: 673
تاریخ عضویت: Jul 2006
محل سکونت: Tehran
پیش فرض Booch, OMT, and UML - 09-10-2006, 07:44 PM

یک موضوع مهم در مدلسازی بصری این است که از چه نماد گرافیکی برای نشان دادن چهره های مختلف یک سیستم استفاده شود. لازم است که این نماد به همه بخشهای وابسته رسانده شود، در غیر اینصورت مدل خیلی مفید نخواهد بود. بسیاری از افراد نمادهایی را برای مدلسازی بصری پیشنهاد کردند. بعضی از این نمادهای محبوب که پشتیبانی قوی دارند، Object Modeling Technology(OMT) ,Booch, Unified Modeling Language(UML می باشند.
برنامه نرم افزاری Raditinal Rose 98 از این سه نماد پشتیبانی می کند. اگرچه UML استانداردی است که با اکثر صنایع مانند استانداردهای ANSI و گروه مدیریت شی Object Managment Group سازگار شده است.

متد Booch بخاطر مخترعش، Grady Booch که دانشمند ارشد شرکت نرم افزاری Raditinal می باشد نامگذاری شده است. او چند کتاب نوشته است که درباره نیازها و مزایای مدل سازی بصری بحث می کند و یک نماد را برای سمبلهای گرافیکی ارائه نموده است تا جنبه های مختلف یک مدل را نماییش دهد. مثلا در این نماد آبجکت ها با ابرها نمایش داده شده اند و این واقعیت را نشان می دهد که آبجکت ها می توانند تقریبا هر چیزی باشند.
همچنین نماد Booch شامل فلشهای مختلفی است تا انواع ارتباطات بین آبجکت ها را نمایش دهد.

متد OMT توسط دکتری بنام Rumbaugh بوجود آمد، که او چندین کتاب درباره تجزیه و تحلیل و طراحی سیستم ها نوشته است. او در کتابی با عنوان تجزیه و تحلیل و طراحی سیستم درباره اهمیت سیستم های مدل سازی در اجزای دنیای واقعی که آبجکت نامیده شده اند، بحث می کند. نمادهای OMT که او پیشنهاد کرده یک طرفدار پرقدرت دارد، به همراه ابزارهای مدل سازی نرم افزار استانداردی مانند Raditinal Rose که از OMT پشتیبانی میکند.
OMT به نسبت Booch از گرافیک بیشتری استفاده می کند تا سیستم ها را واضحتر نماید.

و اما UML زبان مدلسازی یکپارچه، حاصل تلاش دسته جمعی Grady Booch,Dr.James Rumbaugh,Ivar Jacobson . افراد زیادی است .
سمبل های UML تقریبا با نمادهای OMT, Booch متناسب است و همچنین شامل عناصری از نمادهای دیگر می باشد. در حقیقت ادغام مدلها به منظور ایجاد UML در سال 1993 آغاز گردید. هر یک از این سه تفنگدار شروع به آمیختن ایده های متدولوژی دیگر با هم نمودند. یکپارچه سازی رسمی متدولوژیها تا سال 1995 ادامه داشت یعنی تا زمانی که نسخه Unified Method 0.8 معرفی شد.
Unified Method 0.8 اصلاح شده و در سال 1996 به Unified Modeling Language تغییر یافت.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
پاسخ با نقل قول
(#6 (permalink))
قدیمی
webramz آواتار ها
مدیریت انجمنها
Rep Power: 6
webramz is on a distinguished road
 
نوشته ها: 673
تاریخ عضویت: Jul 2006
محل سکونت: Tehran
پیش فرض نمودارهای Uml - 01-18-2007, 12:09 PM

uml به افراد اجازه می دهد تا چندین نوع مختلف از نمودارهای بصری را بوجود آورند که جنبه های مختلف سیستم را نمایش می دهد.
Rational Rose از ایجاد اکثر این مدلها، همانطور که در زیر معرفی شده است، پشتیبانی می کند:
  1. نمودار Use Case
  2. نمودار Sequence توالی
  3. نمودارCollabration همکاری
  4. نمودار Class
  5. نمودارُState Transition
  6. نمودارComponent
  7. نمودارDeployment
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
پاسخ با نقل قول
(#7 (permalink))
قدیمی
تازه وارد
Rep Power: 0
mah_di2004 is on a distinguished road
 
نوشته ها: 1
تاریخ عضویت: Feb 2007
پیش فرض 02-14-2007, 05:53 PM

شمارابه خدابه من کمک کنید
پروژه شی گرافقط کلاسها وروابط آنها رامی خواهم درباره ثبت نام دانشجو
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
پاسخ با نقل قول
(#8 (permalink))
قدیمی
تازه وارد
Rep Power: 0
ly.comeng is on a distinguished road
 
نوشته ها: 6
تاریخ عضویت: May 2007
پیش فرض 08-05-2007, 05:46 PM

سلام

لطفا مباحث مربوط به تتفکر شی گرایی و متد شی گرایی رو ادامه بدین.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
پاسخ با نقل قول
پاسخ


ابزارهای موضوع
نحوه نمایش

قوانین ارسال
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is فعال
شکلک ها فعال است
کد [IMG] فعال است
کدهای HTML غیر فعال است
Trackbacks are فعال
Pingbacks are فعال
Refbacks are فعال



Powered by vBulletin Version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0

Persian Language By Persian Forum Ver 1.0
Copyright ©2002 - 2008 East Idea Data Process, LLC