وبلاگ سید جلال سیدیزدی

ایده برای پروژه (2)

دوشنبه, ۲۹ دی ۱۳۹۳، ۰۸:۰۲ ق.ظ

فرض کنید پروژه ی بدون GUI شامل تعدادی کلاس است که از طریق کلاس Game مدیریت می شود. قرار است کلاسی به نام GUI به پروژه اضافه کنید.
چند اصطلاح:
مدل (model): کلاسی که چیزی از دنیای واقعی را مدل می کند. این کلاس همان کلاس Game است.
نمایش (view): کلاسی که قرار است مدل را نمایش دهد. این کلاس همان کلاس GUI است.
کنترل کننده (controller): این کلاسی است که باید به پروژه اضافه شود. این کلاس اطلاعات را از مدل گرفته به view میدهد و همچنین در قبال عمل کاربر (کلیک و ...) تغییراتی را در مدل (و به تبع آن در view) ایجاد می کند.

روش های متنوعی برای پیاده سازی این الگو که به آن الگوی model-view-controller یا به طور خلاصه MVC گفته می شود، وجود دارد.
یک روش ساده و سر راست به این قرار است:
برنامه با ایجاد یک شی از کلاس controller شروع می شود. controller یک شی از model و یک شی از view ایجاد می کند. معمولاً این دو به عنوان فیلدهای کلاس controller تعریف می شوند.


حال مثلاً در یک حلقه متد اجرای یک مرحله از بازی از کلاس Game (همان model) در controller فراخوانی می شود. این عمل باعث می شود مدل تغییر کند. به همین دلیل اطلاعات مربوطه (وضعیت مدل) از model دریافت شده و به view داده می شود تا وضعیت جدید بازی را نمایش دهد. این عمل هم با فراخوانی متد مربوطه در view و دادن اطلاعات به آن (از طریق پارامتر) انجام می شود.
اما برای اینکه عمل کاربر به controller منتقل شود باید actionListener ها (و احتمالاً دیگر listener ها)، در کلاس controller پیاده سازی و اجرا شود. برای این منظور به طریق زیر عمل می شود.
فرض کنید در کلاس view یا همان GUI یک JButton تعریف کرده اید و قرار است با کلیک بر روی آن تغییر خاصی در بازی ایجاد شود. برخلاف پروژه های قبلی actionListener مربوطه را در کلاس GUI نمی نویسیم، در عوض یک متد برای set کردن actionListener در این کلاس تعریف می کنیم مثلاً با نام setActionListener . در کلاس controller ابتدا actionListener را تعریف کرده سپس آن را از طریق متد setActionListener  به JButton پیوند می دهیم.

مثال:
پروژه را از اینجا دانلود کنید.
کار این برنامه دریافت تعدادی عدد از طریق GUI (کلاس view) و مرتب سازی آنها در کلاس model و نمایش اعداد مرتب شده در GUI است.
در این پروژه از دو button استفاده شده است که actionListener آنها توسط متدهایی تنظیم شده است. این متدها در کلاس controller فراخوانی می شوند.
در کلاس کنترلر دو actionListener به صورت زیر تعریف شده است:
        ActionListener sortListener = new ActionListener() {

@Override
public void actionPerformed(ActionEvent ae) {
sort();
}
};

ActionListener setListener = new ActionListener() {

@Override
public void actionPerformed(ActionEvent ae) {
set();
}
};

سپس هر یک از طریق متدهای مذکور به دکمه ی متناظر مرتبط شده اند.

توجه: برای سادگی منطق برنامه، اصول برنامه نویسی تدافعی در این برنامه رعایت نشده است.

موفق باشید.

  • ۹۳/۱۰/۲۹

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی