• 1 رای - 3 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
الگو های طراحی در شی گرایی
#1
نمی دونم درست نام گذاری کردم یا خیر
اما سوال من به این گونه هست
سیستم های بزرگ مثل سی ام اس ها و فریم ورک ها تمامی کلاس ها بهم مربوط می شوند و ارث می برند

مثلا کلاس دیتابیس از کلاس های کوکی ، سشن و سیکوریتی ارث میبره، بعد مثلا سیستم خبریش از کلاس دیتابیس ارث میبره ، و یک باره همه کلاس ها با هم مرتبط میشند

تا اینجا رسیدم که با کلمه کلیدی extendes میشه دو تا کلاس رو به هم مرتبط کرد و یکی از دیگری ارث میبره
اما یک کلاس چه طور میتونه از چند کلاس دیگه ارث ببره؟
  پاسخ
تشکر شده توسط :
#2
سلام،
منظورتون دقیقاً چیه؟ با همون extends میشه اینکارو کرد:
http://php.benscom.com/manual/en/keyword.extends.php
کجاش مشکل داره؟
وبلاگ: Yousha.Blog.ir


کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بیشتر => نگهداری بهتر
  پاسخ
تشکر شده توسط :
#3
می دونیم PHP از توارث چندگانه پشتیبانی نمی کنه - کاره خوبی هم می کنه Sleepy -
ارث بردن کلاس ها بصورت پست سرهم شاید زیاد کاره درستی نباشه - دلیل براش ندارم Undecided -
من سعی کردم که کلاس پدری داشته باشم که برام اشیاء رو بسازه و درون متغییر هاش ذخیره کنه
اینجوری یه چیزی شبیه توارث اتفاق می افته... - می دونیم این رو من ابداع نکردم و فقط سعی کردم تکرار کنم -
ولی از نظر پشتوانه علمی و مهندسی نرم افزار نمی دونم کارم چقدر درسته
و واقعآ دوست دارم در این زمینه بیشتر بحث بشه تابیشتر روشن بشم
  پاسخ
تشکر شده توسط :
#4
امین جان دقیقا من هم همین راه رو میخوام ، چند متد مثل factory و رو امتحان کردم
اما وقتی به سورس اسکریپت های بزرگ میندازم میبینم اونها این روش رو استفاده نکردند.

درخواست، امکان شیر کردن کلاس هات هست،؟
  پاسخ
تشکر شده توسط :
#5
همونطور که امین گفتند ما چیزی به نام ارث بری چندگانه در php ( و خیلی از زبانهای دیگه )نداریم. ارث بری چند گانه در بعضی از موارد با مهندسی نرم افزار تناقض داره و موارد زیادی که در موردش جستجوی کنید به نتایج خوبی می رسید.
یک کلاس فقط می تونه از یک کلاس دیگه به ارس ببره.
الکوهای طراحی مثل factory یا singleton می تونن به شما کمک کنن که از کلاسها بهتر استفاده کنید.
مثلا کلاسی مثل config یا security می تونه یه singleton باشه و ازش به راحتی استفاده کرد و قرار نباشه که کلاسی مثل db بخواد از این کلاس ارثبری داشته باشه چون دو چیز متفاوت هستند.
در زمینه دسته بندی کلاسها و استفاده از الگوی مناسب روی زند فریم ورک خیلی تحقیق کردم الکوی طراحی بسیار جالبی رو داره
  پاسخ
تشکر شده توسط :
#6
امکان طراحی یک سری کلاس به روش خوب براتون هست؟ وفقط در حد نام گزاری های نام کلاس و نحوه ارتباطشون
  پاسخ
تشکر شده توسط :
#7
منظورتون رو واضحتر بگید ممنون میشم
  پاسخ
تشکر شده توسط :
#8
صالح عزیز به نکات خوبی شاره کردین
ما 26 نوع الگوی طراحی شی گرا داریم که ان شاله طی آموزش شی گرایی به دوستان ارائه میشه
در ضمن من در حال تالیف کتاب الگوی های طراحی شی گرا در PHP هستم
من قبلا هم گفتم قصد دارم سیستم برنامه نویسان PHP‌ایران رو از حالت فعلی به نتقطه خوب وجدیدی برسونم.اگر خودشون هم همکاری کنن.
نقطه شروع این کار آموزش شی گراییه.
اگر نیازه بفرمایید بیشتر توضیح بدم
Smile
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط : oia zoghal
#9
نیاز هست و 6 Wink ( یعنی واقعآ نیازه )

ببخشد که این هارو می زارم از اونجاکه این تایپینگ رو فقط اقایونی مثه وحید صالح علی نمی خونن ( یعنی آدم های بیسوادی مثه من هم هست Blush ) این هارو اضافه می کنم که کمی به زیر دیپلم نزدیک تر بشه Wink
singleton Pattern ( الگوی یکتا): کلاسي است که نمي تواند بيش از يک نمونه شي ء داشته باشد. به اين ترتيب تنها يک نقطه دسترسي عمومي از نمونه شي ء ايجاد مي گردد.
Abstract Factory ( فارسیش رو نمی دونم ): رابط (اينترفيسي) ايجاد مي کند که يک مجموعه از اشياء مرتبط را ساخته و برمي گرداند.
منبع : 30sharp.com

هردوی اینها از الگو های طراحی هستن و یه کمی بیشتر می تونید توی همون وب سایت راجع به الگو های طراحی مطلب بخونید
آدرس : http://www.30sharp.com/ShowArticle.aspx?...AuthorID=4
-----------------------
«چیز»ی که بنظرم میرسه اینه که من از هردوی اینها استفاده کردم . چون از طرفی اون کلاس پدر برای من اشیاء رو می سازه و اگه سعی بشه که یک شی جدید ساخته بشه اون شی قبلی برگشت داده می شه Cool
  پاسخ
تشکر شده توسط : admin zoghal Alimokhlesi boBak
#10
در راستای ادامه این تایپینگ که توسط صلح جیگر ایجاد شده ، اضافه می کنم :

اگه ما یه library/component داشته باشیم که طبق اصول درستی بر پایه ی شی گرایی و به صورت API ایجاد شده باشن، مثه :
کد:
index.php
Library/
      main.class.php
      database.class.php
      datatime.class.php
...
حالا اگه بخوایم تصور کنیم که می شه با ارث بری ( extends ) می شه سهولت ایجاد کرد برای ارتباط دادن بین اشیا
1. اگه فرض کنیم که همه کلاس ها از Class_Main ارث می برن: اون وقت بعد از ساختن object از هر کلاس ما در واقع یه object از Class_Main رو هم می سازیم
این یعنی اینکه اون ارتباطی رو که ما می خوایم ایجاد نمی شه چون برای هر کلاسی که Class_Main ازش شی می سازه یک شی جدید برای Class_Main ساخته می شه و باز می بینیم الی رغم توارث، اشیا به هم مربوط نیستن- اشیا از هم دیگه مستقل اند
2. فرض کنیم که Class_Main از همه کلاس ها ارث می بره : چنین امکانی وجود نداره
کد پی‌اچ‌پی:
// database.class.php
class database extends main
{
    public function 
Set_Message($message)
    {
        
$this->message $mesage;
    }
    
    public function 
Get_Message()
    {
        return 
$this->message;
    }
}

// datetime.class.php
class Date_Time extends main
{
    public function 
Set_Message($message)
    {
        
$this->message $mesage;
    }
    
    public function 
Get_Message()
    {
        return 
$this->message;
    }
}

// main.class.php
class main
{
    public 
$message;
    public function 
db()
    {
        include 
'database.class.php';
        return new 
database($config);
    }

    public function 
dt()
    {
        include 
'datetime.class.php';
        return new 
Date_Time
    
}
}

// my_file.php
include 'library/main.class.php';
$lib = new main;
$db $lib->db();
$dt $lib->dt();

$db->Set_Message('databse');
echo 
$dt->Get_Message(); 
پس می بینیم که این تصور یا عملی نیست یا اگه عملی می شه همون بهتر که نشه

راه حل:
راه حل واضحه ، ارث بری ممنوع ( Wink )
  پاسخ
تشکر شده توسط : zoghal


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان