امیرحسین که فردی است جوان و جویای نام! بهدنبال پیادهسازی سیستمی است که دنیا را تکان دهد. او فکری در سر دارد که احساس میکند اولین قدم از رسیدن به یک سیستم هوشمند قوی است.
او قصد دارد کلاسهایی را در زبان جاوا، فقط با داشتن اطلاعات کلی از آن کلاسها و بهصورت پویا ایجاد کند. امیرحسین که اولین گامهای این پروژه را نوشته، در تکمیل آن از شما کمک خواسته است.
جزئیات پروژه
پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای پروژه اولیه بهصورت زیر است:
.
├── ClassDetail
├── ClassTypes
├── ClassUtil
├── Method
└── OopType
وظیفه اصلی شما در این سوال، تکمیل کلاس ClassUtil است. در این کلاس متدی با نام classMaker وجود دارد که پارامتر ورودی از نوع ClassDetail دریافت میکند و باید کلاسی با اطلاعاتی که از این پارامتر دریافت میکند، بسازد. در ادامه به بررسی کلاس ClassDetail میپردازیم:
کلاس ClassDetail
این کلاس دارای ۵ پراپرتی زیر است:
- پراپرتی 
type: این پراپرتی که از نوعOopTypeاست مشخص کننده نوع کلاسی است که باید ساخته شود. این نوع میتواندenum،interfaceیاclassباشد. - پراپرتی 
name: این پراپرتی که از نوع رشته است نام کلاس را مشخص میکند. - پراپرتی 
properties: این پراپرتی که از نوعMapاست نوع و نام پراپرتیهای کلاس را مشخص میکند، در این مپ کلیدها نوع و مقادیر نام پراپرتیها است. - پراپرتی 
methods: این پراپرتی لیستی از کلاسMethodاست. کلاسMethodنیز دارای سه پراپرتیreturnType،nameوparametersاست که بهترتیب نام، نوع مقدار بازگشت و پارامترهای ورودی متد را مشخص میکند. - پراپرتی 
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 را زیپ کرده و ارسال کنید.
ارسال پاسخ برای این سؤال