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

هم‌چنین برای شرکت در دوره‌های کارآموزی بل‌تات لطفا این فرم را تکمیل کنید.

توجه کنید که نیازی به پاسخ دادن به همه‌ی سوالات نیست؛ زمینه‌های مورد نظرتان را انتخاب کرده و در آن‌ها در مسابقه شرکت کنید.

جاوا - نمونه‌سازی


قرار است برنامه‌ای بنویسید که ساخت نمونه‌ها را به عهده بگیرد.
فایل‌های برنامه را از source دانلود نمایید.

با توجه به توضیحات زیر، متد init از کلاس Initializer را پیاده‌سازی کنید.

این متد لیستی از نام کلاس‌هایی که قرار است بر روی آن‌ها عملیات انجام دهد دریافت می‌کند. سپس از تمام کلاس‌های که دارای Annotation از نوع Instantiate می‌باشند، یک شی (نمونه) می‌سازد. دقت کنید که باید از هر نوع کلاس تنها یک بار نمونه ساخته شود. اگر در هنگام گرفتن شی Class یا ساختن نمونه از کلاسی که دارای Annotation مربوطه است خطایی رخ داد، خطایی از نوع InitializeException پرتاب کنید. پس خطاهای دیگر مثل ClassNotFoundException را دریافت نموده و به جای آن خطای گفته شده را پرتاب کنید.

پس از ساخته‌شدن نمونه‌ها، باید ارتباط بین نمونه‌ها فراهم شود.

فیلدهای مختلفی در کلاس‌ها وجود دارد. برای هر کلاسی که از آن نمونه ساخته‌ایم، اگر فیلدی دارای Annotation از نوع Connect است، باید مقدار آن برابر یک شی از کلاسی شود که نشان‌دهنده‌ی تایپ آن فیلد است و از آن نمونه ساخته‌ایم. اگر کلاس موردنظر یا نمونه‌ای از آن وجود نداشت، خطایی از نوع InitializeException پرتاب کنید. پس خطاهای دیگر مثل ClassNotFoundException را دریافت نموده و به جای آن خطای گفته شده را پرتاب کنید.

برای حل سوال به نکات زیر توجه کنید:

  • برخی از فیلدهای کلاس ممکن است private باشند.
  • در حل سوال می‌توانید از متد getAnnotationType استفاده کنید.
  • کالکشنی که توسط متد init برگردانده می‌شود شامل کلاس‌هایی است که از آن‌ها نمونه ساخته شده است. فقط مجموعه‌ی کلاس‌ها اهمیت دارد و نوع کالکشن خروجی مهم نیست.
  • می‌توانید از تست زیر برای بررسی درستی کد خود استفاده کنید.

تست🔗

@Test
public void TestInitializer() {
    Collection<Object> objects = Initializer.init(
            Arrays.asList("user.Manager", "user.Service", "user.Developer"));

    assertEquals(3, objects.size());
    for (Object obj : objects) {
        if (obj instanceof Manager) {
            // there is a "Connect" annotation for Manager.developer
            assertNotNull(((Manager) obj).getDeveloper());
        } else if (obj instanceof Service) {
            // there is a "Connect" annotation for Service.manager
            assertNotNull(((Service) obj).getManager());
            // there is no "Connect" annotation for Service.employee
            assertNull(((Service) obj).getEmployee());
        } else if (obj instanceof Developer) {
            // an instance of Developer is created!
        } else {
            // anything else should fail
            fail();
        }
    }

    try {
        Initializer.init(Arrays.asList("user.Service", "user.Developer"));
        fail();
    } catch (Exception e) {
        // There is no instance of user.Manager
        // can't set manager for user.Service
        assertTrue(e instanceof InitializeException);
    }

    try {
        Initializer.init(Arrays.asList("user.notAvailable"));
        fail();
    } catch (Exception e) {
        // couldn't find class
        assertTrue(e instanceof InitializeException);
    }

    objects = Initializer.init(Arrays.asList("user.Developer", "user.Employee"));
    // user.Employee doesn't have Instantiate annotation
    assertEquals(1, objects.size());
    // objects contain only user.Developer
    assertEquals("user.Developer", objects.iterator().next().getClass().getName()); 
}
Java

آن چه که باید آپلود کنید🔗

یک فایل zip است که وقتی آن را باز می‌کنیم فقط فایل Initializer.java را ببینیم.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.