امیرحسین که فردی است جوان و جویای نام‌! به‌دنبال پیاده‌سازی سیستمی است که دنیا را تکان دهد. او فکری در سر دارد که احساس می‌کند اولین قدم از رسیدن به یک سیستم هوشمند قوی است.

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

جزئیات پروژه

پروژه‌ی اولیه را از این لینک دانلود کنید. ساختار فایل‌های پروژه اولیه به‌صورت زیر است:

.
├── ClassDetail
├── ClassTypes
├── ClassUtil
├── Method
└── OopType

وظیفه اصلی شما در این سوال، تکمیل کلاس ClassUtil است. در این کلاس متدی با نام classMaker وجود دارد که پارامتر ورودی از نوع ClassDetail دریافت می‌کند و باید کلاسی با اطلاعاتی که از این پارامتر دریافت می‌کند، بسازد. در ادامه به بررسی کلاس ClassDetail میپردازیم:

کلاس ClassDetail

این کلاس دارای ۵ پراپرتی زیر است:

  1. پراپرتی type: این پراپرتی که از نوع OopType است مشخص کننده نوع کلاسی است که باید ساخته شود. این نوع می‌تواند enum، interface یا classباشد.
  2. پراپرتی name: این پراپرتی که از نوع رشته است نام کلاس را مشخص می‌کند.
  3. پراپرتی properties: این پراپرتی که از نوع Map است نوع و نام پراپرتی‌های کلاس را مشخص می‌کند، در این مپ کلید‌ها نوع و مقادیر نام پراپرتی‌ها است.
  4. پراپرتی methods: این پراپرتی لیستی از کلاس Method است. کلاس Method نیز دارای سه پراپرتی returnType، name و parameters است که به‌ترتیب نام، نوع مقدار بازگشت و پارامتر‌های ورودی متد را مشخص می‌کند.
  5. پراپرتی oop: این پراپرتی لیستی از رشته‌ها را مشخص می‌کند. این رشته‌ها نام کلاس‌های جاواست که شما باید براساس نوع این کلاس‌ها، آن‌ها را extends یا implementsکنید.

کلاس ClassUtil

حال که با کلاس ClassDetail آشنا شدید باید کلاس ClassUtil را تکمیل کنید. در ادامه به بررسی دو مثال از عملکرد این کلاس خواهیم پرداخت.

فرض کنید قصد داریم تا یک enum با نام Month بسازیم که پراپرتی با نام NAME دارد. برای این کار کد زیر را می‌نویسیم و از متد کلاسی که تکمیل کردید استفاده می‌کنیم:

OopType type = OopType.ENUM;
String name = "Month";
Map<String, String> properties = Map.of("", "NAME");
String code = ClassUtil.classMaker(new ClassDetail(type, name, properties, List.of(), List.of()));

خروجی این کد باید کلاسی به‌صورت زیر باشد:

public enum Month {
 NAME;
}

در مثالی دیگر فرض کنید قصد داریم تا کلاسی بسازیم که دارای مقادیری به‌صورت زیر باشد:

OopType type = OopType.CLASS;
String name = "Month";
Map<String, String> properties = Map.of("String", "name");
List<String> oop = List.of("Object");
String code = ClassUtil.classMaker(new ClassDetail(type, name, properties, List.of(), oop));

که در این حالت متغیر code باید به‌صورت زیر باشد:

import java.lang.Object;
import java.lang.String;
public class Month extends Object {
String name;
}

نکات

  • کلاس شما حتما باید بدون مشکل کامپایل شود.
  • تضمین می‌شود نام کلاس‌هایی که در پراپرتی oop قرار داده می‌شود، حتما وجود دارند و از پکیج‌های استاندارد جاوا هستند.
  • کلاسی که می‌سازید نباید هیچ کلاس اضافی را import کرده باشد.
  • رعایت تمام موارد شی‌گرایی، به‌عنوان مثال هر کلاس فقط می‌تواند یک کلاس را extends و ... ، باید در کلاس شما رعایت شده باشد.
  • در صورت وجود مشکل در قسمت extends یا implements ، کلاس شما باید کامل ساخته شود و فقط extends یا implements را نادیده بگیرد.
  • اگر کلاسی متد داشت، بدنه متد‌ها باید خالی باشد و تضمین می‌شود نوع خروجی متد‌ها void باشد.

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

پس از پیاده‌سازی موارد خواسته‌شده، کلاس ClassUtil را زیپ کرده و ارسال کنید.

ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.