PDA

View Full Version : معماری نرم افزار



javaphantom
چهارشنبه 08 اسفند 1386, 14:01 عصر
از آنجایی که من جویای علم هستم یک پروزه با استاد مهندسی نرم ۲ برداشته ام که در این پروژه قراره که من تمام بیمارستانها ایران رو automation کنم. اما خواهشا در چند مفهوم گیر کردم که اگر اینرا بدونم دیگه همکه کارام حله لطفا جواب مرا بدهید؟

معماری نرم افزار چیست و تفاوت آن با مهندسی نرم افزار چیست؟
به چه کسی معمار نرم افزار گفته می شود؟
به چه کسی مهندس نرم افزار گفته می شود؟
معماری J2EE چیست و آیا ما معماری Net. یا معماری delphi یا معماری دیگری هم داریم اگر داریم لطفا توضیح دهید؟

javaphantom
پنج شنبه 09 اسفند 1386, 11:02 صبح
تعریف معماری نرم افزار یا همان software architecture
توی قدیم ها وقتی می خواستن یک برنامه درست کنند خوب اون موقع که مثل الان زبانهای سطح بالا نبود وقتی می خواستن یک محصول تولید کنند باید از لحاظ سخت افزاری مثل حافظه cpu و خیلی چیزها رو در نظر می گرفتن با دستورات محدود یک ریزپردازنده برنامه نویسی می کردند. تا اینکه زبان های برنامه نویسی تونستن یک سری data type ها رو دورست کنند و روند برنامه نویسی رو راحتر کنند مانند زبان Fortran که در این زبان یک سری data type های اولیه وجود دارد. بعد از آن بر این عقیده شدند که در صورتی که بتوان یک ساختما داده از قبل تعیین شده داشته باشیم می توان یک محصول نرم افزاری صیحیح و درست تولید کنیم. این آرزو برآورده شد و کم کم به تعداد datatype ها افزوده شد که این data type ها رو می شد بصورت انتزاعی تعریف کرد و خود بصورت ماژولهای جدا ازهم می شدند. همین امر باعث شد که زبانهای سطح بالا بحث و مفهوم abstract data type استفاده بشه و بتوان ساخمتان داده های خواسته شده بصورت ماژولهای جدا از هم هستند را پیاده سازی کرد. از طرفی هرچی سیستم نرم افزاری بزرگتر می شد در این زبانها پیچیدگی و ارتباط بین این ماژولها دیگر از حالت الگوریتمهای ساده پیروی نمی کرد و نیاز بیک آنالیز و مدیریت دقیق بین این ماژولها و ترکیبی از آنها و همچینن ارتباط بین آنها باشد. در اینجا بود که دید کلی به سیستم چه از لحاظ سخت افزاری چه از لحاظ نرم افزاری و چگونگی پیاده سازی در فازهای اولیه حائز اهمیت بود. اینجا بود که برای پیاده سازی این سیستم ها بحث معمار و پیاده سازی کنند آن معمار نرم افزار بوجود آمد.

معماری JEE
کلا سکوی Jee سکویی است برای تولید و تهیه استاندارد معماری چند لایه ای برای برنامه های سازمانی. معماری JEE برای پشتیبانی برنامه های مولفه ای یا همان component-base می باشد بطوری که بتوان این component ها را همان طور که گفته شد در لایه های مختلف ایجاد کرد و از آنها پشتیبانی کرد.
این لایه به سه لایه فیزیکی و کلی تفسیم می شوند که عبارتند از
client tier:
که تمام کامپوننت های servet و jsp در این لایه قرار دارند و واسطه ای برای Middle tier بشمار می آید
Middle tier:
به آن server tier هم گفته می شود که در این لایه web application برای مدیرت کامپوننت های business را کنترل می کنند.
Enterprise data tier:
لایه data ها ما می باشد که کلا تمام اطلاعات سازمانی ما دراین لایه قرار دارد که می تواند از نوع persistence یا relational باشد.

unhandled_event
جمعه 10 اسفند 1386, 18:56 عصر
سلام


نرم افزارهای بیمارستانی که مد نظر شما هستن بنام سیستمهای HIS الان وجود دارن میشه ازشون ایده گرفت.
در مورد معماری نرم افزار بطور تجربی و تئوری چیزایی فهمیدم خوشحال میشم اگر جایی اشتباه میکنم تصحیح بشه :
معماری نرم افزار در چند جنبه مطرح میشه هم در سطح برنامه نویسی هم طراحی و هم نیازمندیهای سازمانی و business.

از جنبه برنامه نویسی :
ساختارگرا : که میگه هرچی هست و بنویس بیا پایین و تمام کارهای مجزا رو به فانکشنهای واگذار کن. این روش هنوز هم در بسیاری از ماژولهای نرم افزارهایی مثل سیستم عاملها وجود داره.
شی ء گرا : در این روش تلقی هرچیز و هر موجودیتی بصورت شی ء و کلاس هست
و بتدریج design pattern ها و کامپوننتها رو داریم تاثیر این دیدگاه در مدل طراحی معماریهای مختلف در تکنولوژی Java خیلی زیاده.

دیدگاه جدید سرویسگرا : همه چیز رو بجای کامپوننت سرویس میبینیم اما هنوز جدیده و خیلی مشخص و ملموس نیست.
از دیدگاه طراحی (که به Java EE یا همون J2EE مربوط میشه)
معماری یک نرم افزار بمعنی ساختار اجزاء اون و نحوه ارتباط و تعامل اونها و اینکه شکل ارتباط و دانش هرکدام از این اجزاء نسبت به هم چقدره که در واقع این همون سطح abstraction میشه . ما گاهی مجبوریم این معماری رو مدل کنیم تا بهتر بتونیم مشکلاتش رو حل کنیم.
در واقع از دید RUP بزرگترین ریسک طراحی نرم افزار بعد از تکنولوژی همین معماریه که درستی و کارایی اون باید برای ذینفع یا کارفرما بنحوی اثبات بشه یعنی اینکه مثلا این ساختار علاوه بر درست کارکردن همیشه با این اجزاءش میتونه نیاز سازمان شما رو از نظر هزینه ، ارزش افزوده و کارایی مرتفع کنه .

از دید کلی تر دغدغه معماری نرم افزار از قدیم وجود داشته و به نسلهای جدید نرم افزار لزوما ارتباط نداره میشه به اینها اشاره کرد :

1-معماری تک جزئی یا single
در این ساختار اجرای برنامه ، exe و ماژولهای برنامه یا ذخیره سازی اطلاعات همه در یک جا جمع شدن و خلاصه یک کاربره و یک کامپیوتر.

2- معماری main-frame و dump-terminal : در این معماری یک ترمینال وجود داره که کاربر پشت ترمینال که چیزی بجز ارسال کننده فرمان و گیرنده جواب اون نیست قرار گرفته و
تمام پردازشها بر اساس الگوریتمهای زمانبندی و تقسیم منابع در سیستم عامل سرور انجام میشه برنامه و دیتابیس و هرچی دیگه هست در سرور یا همون main frame قرار داره.

3- معماری کلاینت-سرور یعنی یک کلاینت سطح عالیتر وجود داره و مقدار بیشتری از پردازش بر روی این کلاینت و مقداری هم بر روی سرور انجام میشه مثل اکثر برنامه های تجاری تحت ویندوز موجود که با VB یا دلفی یا دات نت نوشته میشن که exe روی کلاینت و ذخیره سازی بر روی database server انجام میشه.
4- معماری چند لایه یا Multi Tier (معمولا سه لایه) :
در این نوع معماری که فعلا فقط در تکنولوژی Java EE عملیاتیه بصورت استاندارد سه طرف حساب داریم :

1- لایه Presentation یا User Interface یا رابط کاربر که میتونه یک Web Client یا دستگاه کارت هوشمند خوان یا یک کلاینت دسکتاپ مثل ویندوز باشه. این کلاینت بسته به نوع کارش فقط در حد پردازشهاییه که ماهیتا به ارتباط کاربر با نرم افزار مربوط میشن مثل ارسال فرمانها یا دریافت و نمایش نتیجه و یا مثلا عدم نمایش دکمه حذف درصورت نادرست بودن متغیر دسترسی به عمل حذف.

2- لایه میانی یا Middle Tier که معمولا وظیفه انجام داددن منطق برنامه رو داره مثلا در سیستم بیمارستان قوانین پذیرش بیمار ،حسابداری ، محاسبات بیمه یا زمانبندی کشیکها و از این قبیل. در نرم افزارهای بزرگ 24x7 یا Enterprise Application یک ظرف که بخشی از application server هست وظیفه ساختن و از بین بردن نمونه از کلاسها و طول عمرشون و در کل اجرای کدهای کامپوننتهای لایه میانی رو انجام میده و درصورت نیاز به پردازش زیاد یا وجود صدها request در ثانیه ، میشه این کدها رو بین سرورها پخش کرد و بصورت توزیع شده درآورد که کار ساده ای هم نیست.

3- لایه مدل یا دیتا که Persistant یا ذخیره کردن اطلاعات بصورتهای مختلف که بشکل معمولش همون دیتابیس های رابطه ای یا relational هستن توسط کامپوننتی در این لایه انجام میشه. مدل بصورت مستقیم یا توسط واسط دیگری با لایه میانی یا application و در معماری MVC بصورت غیر مستقیم با لایه presentation هم در ارتباط هست. فکر کنم مثال خوب لایه application و model و نحوه ارتباطشون EJB 3 هست که در پست دیگه ای توسط شما مطرح شده و دنیای جدیدیه.



موفق باشید

javaphantom
جمعه 10 اسفند 1386, 22:32 عصر
دوست عزیز از تمام گفتهای شما بسیار متشکرم. من خیلی خوشحال شدم که دیدم یک نفر پیدا شده و می فهمه که اهمیت دید کار از نظر آنالیز-طراحی - معماری و pattern هایی که وجود داره بسیار مهم است و از اینکه به این گونه وقت گذاشته اید و تعریف کرده اید بیشتر متشکرم.
من راستش رو بخواهید هیچ پروژه بیمارستانی ندارم و اصلا بهتر بکم درس نرم افزار ۲ ندارم. هدف از مطرح کردن این سوال برای این بود که من در چند پست دیگر مطالبی از بعضی ها خواندم که واقعا جای تعجب داشت و نشان می داد که بسیار از موضوع خارج هستند. زبان جاوا یک ابزاری است برای استفاده از تکنولوژی های موجود در جاوا بدرد بخور است و من سعی دارم می کنم که به کسانی که در فروم هستند و دوست دارند پیشرفت کنند اینرو بقبولونم که زبان یک وسیله است نه یک هدف. من انقدر که در مورد IDE کتاب و فیلم آموزشی توی این فروم دیده ام در کمتر فروم های خارجی با همچین چیزی برخورد کردم یا اصلا بهتر بگم اصلا برخورد نکردم.
بهترین فیلم آموزش جاوا
بهترین محیط IDE
سخنی در باب جاوا
و بک سری سوالات دانشگاهی که اصلا مربوط با جاوا هم نیست که می توان آنها را با VB هم انجام داد.
از نظر من دونستن مفهوم و دلیل انتخاب جاوا یا هر تکنولوژی دیگر برای یک پروژه کار نشانه دید مهندسی و علمی است نه مطرح کردن چند الگوریتم یا ۱۰۰ خط یا ۱۰۰۰ خط کد.
در هر صورت نوشته های شما قابل تامل و مطالعه بیشتر هستند برای کسانی که دوست دارند درست یاد بگیرند. من بازم می گم مجبور شدم خودم از خودم سوال طرح کنم و امید وارم که ققط خودمم نباشم که جواب بدم.

najafzade
دوشنبه 13 اسفند 1386, 20:53 عصر
تعریف معماری نرم افزار یا همان software architecture
توی قدیم ها وقتی می خواستن یک برنامه درست کنند خوب اون موقع که مثل الان زبانهای سطح بالا نبود وقتی می خواستن یک محصول تولید کنند باید از لحاظ سخت افزاری مثل حافظه cpu و خیلی چیزها رو در نظر می گرفتن با دستورات محدود یک ریزپردازنده برنامه نویسی می کردند. تا اینکه زبان های برنامه نویسی تونستن یک سری data type ها رو دورست کنند و روند برنامه نویسی رو راحتر کنند مانند زبان Fortran که در این زبان یک سری data type های اولیه وجود دارد. بعد از آن بر این عقیده شدند که در صورتی که بتوان یک ساختما داده از قبل تعیین شده داشته باشیم می توان یک محصول نرم افزاری صیحیح و درست تولید کنیم. این آرزو برآورده شد و کم کم به تعداد datatype ها افزوده شد که این data type ها رو می شد بصورت انتزاعی تعریف کرد و خود بصورت ماژولهای جدا ازهم می شدند. همین امر باعث شد که زبانهای سطح بالا بحث و مفهوم abstract data type استفاده بشه و بتوان ساخمتان داده های خواسته شده بصورت ماژولهای جدا از هم هستند را پیاده سازی کرد. از طرفی هرچی سیستم نرم افزاری بزرگتر می شد در این زبانها پیچیدگی و ارتباط بین این ماژولها دیگر از حالت الگوریتمهای ساده پیروی نمی کرد و نیاز بیک آنالیز و مدیریت دقیق بین این ماژولها و ترکیبی از آنها و همچینن ارتباط بین آنها باشد. در اینجا بود که دید کلی به سیستم چه از لحاظ سخت افزاری چه از لحاظ نرم افزاری و چگونگی پیاده سازی در فازهای اولیه حائز اهمیت بود. اینجا بود که برای پیاده سازی این سیستم ها بحث معمار و پیاده سازی کنند آن معمار نرم افزار بوجود آمد.

معماری JEE
کلا سکوی Jee سکویی است برای تولید و تهیه استاندارد معماری چند لایه ای برای برنامه های سازمانی. معماری JEE برای پشتیبانی برنامه های مولفه ای یا همان component-base می باشد بطوری که بتوان این component ها را همان طور که گفته شد در لایه های مختلف ایجاد کرد و از آنها پشتیبانی کرد.
این لایه به سه لایه فیزیکی و کلی تفسیم می شوند که عبارتند از
client tier:
که تمام کامپوننت های servet و jsp در این لایه قرار دارند و واسطه ای برای Middle tier بشمار می آید
Middle tier:
به آن server tier هم گفته می شود که در این لایه web application برای مدیرت کامپوننت های business را کنترل می کنند.
Enterprise data tier:
لایه data ها ما می باشد که کلا تمام اطلاعات سازمانی ما دراین لایه قرار دارد که می تواند از نوع persistence یا relational باشد.

مطالب جالبی نوشته اید. ولی کاشکی این مطالب رو به زبان کتابی می نوشتید تا اگه کسی خواست تو مقالاتش هم از اون استفاده کنه (البته با اجازه شرعی شما) بتونه.

با تشکرات فراوان

fkohantorabi
چهارشنبه 15 اسفند 1386, 04:40 صبح
من انقدر که در مورد IDE کتاب و فیلم آموزشی توی این فروم دیده ام در کمتر فروم های خارجی با همچین چیزی برخورد کردم یا اصلا بهتر بگم اصلا برخورد نکردم.


یک دلیلش می تواند این باشد که در غرب Java IDE یعنی Eclipse بخاطر اینکه معروف هستش و مجانی. خیلی ها اصلا IDE دیگری نمی شناسند.

HIS مطلب جالبی هستش و ممنون میشم اگه مطالب جالبی که پیدا می کنی رو به ما هم بگی.


فرزاد-