امیرحسین که فردی است جوان و جویای نام! بهدنبال پیادهسازی سیستمی است که دنیا را تکان دهد. او فکری در سر دارد که احساس میکند اولین قدم از رسیدن به یک سیستم هوشمند قوی است.
او قصد دارد کلاسهایی را در زبان جاوا، فقط با داشتن اطلاعات کلی از آن کلاسها و بهصورت پویا ایجاد کند. امیرحسین که اولین گامهای این پروژه را نوشته، در تکمیل آن از شما کمک خواسته است.
جزئیات پروژه
پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای پروژه اولیه بهصورت زیر است:
.
├── 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
را زیپ کرده و ارسال کنید.
ارسال پاسخ برای این سؤال