PDA

View Full Version : طراحی یک interface برای عمل جمع



مهدی فهمیده غلامی
سه شنبه 27 اردیبهشت 1384, 22:29 عصر
من یک اینترفیس برای عمل جمع طراحی کنم بصورت زیر:


Isum = interface
['{66C1649F-9281-4B5A-A558-734A40971403}']
function Add(x,y);
end;

مشکل من:
به تابع add توجه کنید
من میخوام توی ایترفیس بگم که فقط یک تابع add تعریف شده که دو پارامتر میگیره و یه خروجی
می ده )(یعنی نوع ورودی و خروجی مشخص نیست
سپس در پیاده سازی های مختلف پارامتر های ورودی و خروجی رو مشخص کنم
مثلا یک پیاده سازی بصورت زیر باشد:


SumClass1=class(TInterfacedObject,Isum)
function Add(x,y:pointer):pointer;
end;

vcldeveloper
چهارشنبه 28 اردیبهشت 1384, 02:12 صبح
همچین کاری به شکلی که شما در بالا انجام دادید، امکان پذیر نیست. نوع آرگومانها و مقدار برگشتی تابع در کلاس هایی که یک Interface رو پیاده سازی می کنند، باید مثل تعریف تابع در Interface باشه.

برای رسیدن به مقصود خودتون، از overload کردن توابع استفاده کنید.

Inprise
چهارشنبه 28 اردیبهشت 1384, 03:13 صبح
مسئله ات رو Template ها بصورت عمومی حل میکنند . ( عموما" برنامه نویسان C بیشتر از بقیه با مفهوم و کاربرد Template آشنا هستند چون چیزی مانند STL یا Standard Template Library از ملزومات توسعهء برنامه های بزرگ C است اما دلفی با VCL نیاز به این امکان رو تا حدود زیادی پوشش داده ، لیکن این بدان معنی نیست که این ویژگی توسط دلفی حمایت نمیشه )

Template ها به بیان ساده ، کلاسهائی مستقل از نوع هستند . یعنی تعریف عملکرد فاعل بدون مشخص کردن مفعول مستقیم . نوعی تجرید در سطح نوع ؛ و به برنامه نویسی مبتنی/وابسته بر Template ها اصطلاحا" Generic Programming گفته میشه . " این مقاله (http://bdn.borland.com/article/0,1410,27603,00.html)" از BDN کمکت میکنه شروع کنی .

موفق باشی

مهدی فهمیده غلامی
چهارشنبه 28 اردیبهشت 1384, 21:19 عصر
با تشکر از راهنمایی دوستان
جناب کشاوزر استفاده از تابع overload شده در اینترفیس کار جالبی نیست
ایا نمیشه از توابع با پارامتر های انتزاعی نوع تعریف کرد؟ در مورد تعداد ارگومان هم همینطور؟؟؟

در ضمن کلمات
_VECTOR_INTERFACE و _VECTOR_DATA_TYPE
چکار میکنه؟

Delphi Skyline
چهارشنبه 28 اردیبهشت 1384, 22:06 عصر
یک چیزی : اصلا برای چی interface . اصلا interface چیست ؟ این کار ها برای چیست ؟

vcldeveloper
پنج شنبه 29 اردیبهشت 1384, 05:08 صبح
در ضمن کلمات
_VECTOR_INTERFACE و _VECTOR_DATA_TYPE
چکار میکنه؟
این کلمات نام دو متغیر هستند (در مقاله ایی که آقای Inprise معرفی کردند) که در داخل کد شما تغییر نام داده میشند:


_VECTOR_DATA_TYPE_ = Double;
IFloatVector = _VECTOR_INTERFACE_;

vcldeveloper
پنج شنبه 29 اردیبهشت 1384, 05:11 صبح
در ضمن آقای غلامی عزیز،
لطفا دفعات بعد، برای یک سوال چندین تاپیک باز نکنید. این سوال رو شما در تاپیک های مختلف به اشکال مختلف پرسیدید. پیگیری سوال از یک تاپیک برای خودتون هم آسونتره
http://www.barnamenevis.org/forum/viewtopic.php?t=26355

موفق باشید