PDA

View Full Version : سوال: طراحی نرم افزار تبدیل کننده واحد



Hatam09
شنبه 16 اسفند 1393, 18:25 عصر
سلام،
من میخوام یک نرم افزار تبدیل کننده واحد بنویسم (تحت جاوا) که از واحد های زیادی پشتیبانی میکنه.

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


مثالی برای جا افتادن سوال.
فرض کنیم سه واحد کیلومتر، مایل و فوت رو داریم. برای این ها 6 تا متد داریم (مایل به کیلومتر، کیلومتر به مایل، کیلومتر به فوت و ...) حالا اگر بخوام واحد یارد رو اضافه کنم، باید شیش تا متد دیگه برای نرم افزار بنویسم. و هر چی تعداد واحد ها بیشتر بشه تصاعدی این تعداد متد ها بالا میره.

راه حل چیه؟ با چه pattern ای میشه کار رو ساده تر و معقول تر کرد؟
ممنون.

reza_noei
شنبه 16 اسفند 1393, 18:48 عصر
سلام،
من میخوام یک نرم افزار تبدیل کننده واحد بنویسم (تحت جاوا) که از واحد های زیادی پشتیبانی میکنه.

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


مثالی برای جا افتادن سوال.
فرض کنیم سه واحد کیلومتر، مایل و فوت رو داریم. برای این ها 6 تا متد داریم (مایل به کیلومتر، کیلومتر به مایل، کیلومتر به فوت و ...) حالا اگر بخوام واحد یارد رو اضافه کنم، باید شیش تا متد دیگه برای نرم افزار بنویسم. و هر چی تعداد واحد ها بیشتر بشه تصاعدی این تعداد متد ها بالا میره.

راه حل چیه؟ با چه pattern ای میشه کار رو ساده تر و معقول تر کرد؟
ممنون.

سلام
کار با فایل و ساختار رو بلد هستید ؟

Hatam09
شنبه 16 اسفند 1393, 18:52 عصر
سلام
کار با فایل و ساختار رو بلد هستید ؟

اگر منظورتون io و nio هست بله کار کردم.
مورد سوال من در مورد نحوه کلاس بندی هاست.

reza_noei
شنبه 16 اسفند 1393, 19:09 عصر
اگر منظورتون io و nio هست بله کار کردم.
مورد سوال من در مورد نحوه کلاس بندی هاست.

راستش من شی گرایی رو خوب بلد نیستم اما اگر بخواهم چنین برنامه ای رو بنویسم از لیست پیوندی استفاده میکنم :
یک بخش تنظیم دستی وجود دارد و یک بخش تبدیل واحد.
از بخش تنظیم دستی میتونید برای ورود تبدیلات جدید استفاده کنید و از بخش تبدیل واحد برای ورودی گرفتن و خروجی دادن.

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

منظورتون از pattern رو متوجه نشدم؟
اگر نیاز به توضیحات بیشتر بود حتما بگید.

Hatam09
یک شنبه 17 اسفند 1393, 10:18 صبح
راستش من شی گرایی رو خوب بلد نیستم اما اگر بخواهم چنین برنامه ای رو بنویسم از لیست پیوندی استفاده میکنم :
یک بخش تنظیم دستی وجود دارد و یک بخش تبدیل واحد.
از بخش تنظیم دستی میتونید برای ورود تبدیلات جدید استفاده کنید و از بخش تبدیل واحد برای ورودی گرفتن و خروجی دادن.

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

منظورتون از pattern رو متوجه نشدم؟
اگر نیاز به توضیحات بیشتر بود حتما بگید.

سلام
ممنون ایده های خوبی گرفتم. من دنبال design pattern های خاص بودم اما راه های ساده تری هم مثل چیزی که گفتید هست.
متشکرم.