• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
بحث درمورد رعایت اصول مهندسی و استفاده از شی گرایی
#1


تا چه حد باید از این اصول پیروی کنیم ؟
تو چه برنامه هایی باید از شی گرایی استفاده کنیم ؟؟
هدف اصلی چیه ؟
بهینه گی چقدر مهمه ؟
ایا بهتر نیست که در بیشتر برنامه ها که از شی گرایی استفاده نشه ؟

لطفا اگه میشه چند منبع مفید معرفی کنید .

نکته :
علت این که من این انجمن رو برای سئوالم انتخاب کردم. دانش بالای مدیران و کاربران اون از شی گرایی بوده .
لازم به ذکره که تاپیکو اینجا ساختم چون بعدا قراره مثال هایی قرار بگیره و مشکلاتش برطرف بشه . لذا تاپیک مکان مناسبی ایجاد شده .
  پاسخ
تشکر شده توسط :
#2
سلام دوستان
یه مدتیه احساس میکنم که کد هام خیلی بی اصول شده
نام گذاری متغیر ها زیاد خوب نیست

برای مثال شما این تابع رو ببینید :


فرض کنید ارایه data این هستش :
کد پی‌اچ‌پی:
$Platforms = array ("Macintosh" =>NonSpecified"X11" =>NonSpecified ,"Windows" => 90 ); 

این برنامه یک ارایه به عنوان پارامتر میگیره
به جای اونهایی که NonSpecified هست بر اساس جمع کل value های ارایه مقدار دهی میشن و بعد با یک mt_rand
یکی انتخاب و برگشت داده میشه ...
حالا شما بگید که بهتر بود این بخش کوچکی از برنامه رو چطور مینوشتم که اصولی تر باشه ؟
ایا میشه این تابع رو به عنوان یه method تو کلاس تعریف کرد یا باید به قسمت های کوچکتر تعریف کرد ////

کد پی‌اچ‌پی:
        if(!is_array($data))
                die(
'array only');
        
$dataCount count($data);
        
$Chance 100;
        foreach(
$data as $value)
        {
                if(
is_int($value))
                {
                        
$SpecifiedField++;
                        
$Chance -= $value;
                }
        }
        
$NonSpecifiedField $Chance / ($dataCount $SpecifiedField);
        foreach(
$data as & $value
        {
                if(!
is_int($value))
                        
$value $NonSpecifiedField;
        }

        
$fi 1;
        
$rand mt_rand(1100);
        foreach(
$data as $key => $value1)
        {

                
$se += $value1;
                if(
$rand >= $fi and $rand <= $se)
                {
                        return 
$key;
                }
                
$fi += $value1;
        } 



  پاسخ
تشکر شده توسط :
#3

نقل قول:تا چه حد باید از این اصول پیروی کنیم ؟
به نظرم با تمام توان باید استفااده کرد. شاید ابتدا سخت باشه . اما بعد از مدتی آنچنان راحتی و آسودگی به شما میده که حد مرز نداره.

نقل قول:تو چه برنامه هایی باید از شی گرایی استفاده کنیم ؟؟
در تمامی کارها البته به شرطی که معماری و نحوه طراحی شی ها رو خوب فرا بگیرید. کلا شی گرایی برای جلوگیری از تکرار کدنویسی و راحتی و درک راحت کد هست.

نقل قول:هدف اصلی چیه ؟
بالا توضیح دادم.

نقل قول:بهینه گی چقدر مهمه ؟
من سر بهینگی خیلی وقت میزارم. شاید در یک پروژه در مرحله اول زیاد واجب نباشه اشکریپتتون بهینه باشه. مثل بحث کشینگ. اما وقتی ویزیتور بالا میره اون موقع عمق فاجعه رو درک میکنید.

نقل قول:ایا بهتر نیست که در بیشتر برنامه ها که از شی گرایی استفاده نشه ؟
از کد نوشتن زیاد خوشتون میاد؟

نقل قول:لطفا اگه میشه چند منبع مفید معرفی کنید .

از گوگل بهتر سراغ ندارم. منتها در چه ضمینه؟ منبع می خواهید
  پاسخ
تشکر شده توسط : alic
#4
سلام
ممنون از پاسخت
چند منبع معتبر اینگلیسی از شی گرایی و تجزیه تحلیل نرمافزار .و اصول مهندسی نرمافزار میخواستم .

بعضیا طوری شی گرایی میکنن که فرقی با برنامه نویسی غیر شی گرایی نداره و بعضا اینقدر قاطی کد مینویسن که نمیشه حتی اونو گسترش داد.
مثالا وقتی کارشون که یک پروژه خیلی بزرگیه میان یک کلاس استفاده میکنن و هر چی که لازم باشه یه method براش میسازن و اینطوری خیلی قاطی میشه
تا چه حد باید به این مورد ها حساسیت نشون بدیم ؟؟؟


یعنی شما خودت سعی میکنی پروژهات رو به کلاس های کوچکتر تبدیل کنی و هر کاری رو به یک کلاس محول کنی یا ... ؟؟

فرض کنید یه کلاس socket داریم و یه ورودی url از ما میپزیره
بعدا قراره این url قسمت host جدا بشه و تو http header قرار داده بشه
سئوال :
1. ایا برای این url یک data member تعریف کنیم ؟
2. ایا بهتر نیست که کلاس httpheader بسازیم و اینگونه موارد رو اونجا تجزیه تحلیل بشه ؟


نظرت در مورد ارث بری چیه ؟ منسوخ که نشده ؟به نظر من از یک data member استفاده بشه بهتره
درسته ؟
کد پی‌اچ‌پی:
<?php




class A
{
        protected 
name;
}




class 
B
{
        private 
Class_A;




        public function 
B()
        {
                
$this->Class_A = new A;
        }




        public function 
setName($name)
        {
                
$this->Class_A->name $name;
        }




        public function 
getName()
        {
                return 
$this->Class_A->name;
        }




}




?>
  پاسخ
تشکر شده توسط :
#5
نقل قول:بعضیا طوری شی گرایی میکنن که فرقی با برنامه نویسی غیر شی گرایی نداره و بعضا اینقدر قاطی کد مینویسن که نمیشه حتی اونو گسترش داد.
مثالا وقتی کارشون که یک پروژه خیلی بزرگیه میان یک کلاس استفاده میکنن و هر چی که لازم باشه یه method براش میسازن و اینطوری خیلی قاطی میشه
تا چه حد باید به این مورد ها حساسیت نشون بدیم ؟؟؟

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


نقل قول:یعنی شما خودت سعی میکنی پروژهات رو به کلاس های کوچکتر تبدیل کنی و هر کاری رو به یک کلاس محول کنی یا ... ؟؟
من 8 ماه در حال نوشتن یک پرتال هستم. در همین راستا تا الان 198 نسخه متفاوت تو پروژه ایجاد کردم.(تغییرات اساسی) در همین راستا وحید، محمد نیکی ، رامین فرمانی ، مخلصی و پروانه رو دیونه کردم. چون برام مهم بود که درست و بهینه و ..... کلاس هام رو ایجاد کنم.
اما تا الان دلیلی ندیدم که بخوام برای هر چیز کوچیکی یک کلاس ایجاد کنم. توضیحات بیشتر رو همراه مثال میدم


نقل قول:رض کنید یه کلاس socket داریم و یه ورودی url از ما میپزیره
بعدا قراره این url قسمت host جدا بشه و تو http header قرار داده بشه
سئوال :
1. ایا برای این url یک data member تعریف کنیم ؟
2. ایا بهتر نیست که کلاس httpheader بسازیم و اینگونه موارد رو اونجا تجزیه تحلیل بشه ؟


خیر در ایین مورد به دلییل اینکه همین url و موارد تشکیل دهندش در خیلی جاها نیازم هست. و همیشه هم نیاز ندارم. در یک کلاس فرضا core یک متد url تعریف کردم. از اونجا که همیشه در $_server می تونید url فعلی رو بدست بیاریم. من آدرس فعلی رو از اینجا می کنم و خروجی رو به صورت آرایه و جدا سازی شده خروجی میدم. حالا در هر کجا که لازم داشتم. از مقادیر استفاده می کنم. الان هیچ حافظه ای رو اشغال نکردم در مقابل راه شما


نقل قول:نظرت در مورد ارث بری چیه ؟ منسوخ که نشده ؟به نظر من از یک data member استفاده بشه بهتره

این حرفا چیه عزیز جان ،اصل مبحث شی گرای همین وراثت هست. منسوخ ؟؟؟؟؟



(۱۳۸۹ بهمن ۲۴, ۰۷:۲۶ ب.ظ)alic نوشته: نظرت در مورد ارث بری چیه ؟ منسوخ که نشده ؟به نظر من از یک data member استفاده بشه بهتره
درسته ؟
کد پی‌اچ‌پی:
<?php




class A
{
        protected 
name;
}




class 
B
{
        private 
Class_A;




        public function 
B()
        {
                
$this->Class_A = new A;
        }




        public function 
setName($name)
        {
                
$this->Class_A->name $name;
        }




        public function 
getName()
        {
                return 
$this->Class_A->name;
        }




}




?>

درست بودنش که درسته از نظر سانتکسی. اما هدف از این کلاس چیه و با کلاس زیر چه تفاوتی داره؟ که شما یک کلاس رو ایجاد کردید.
کد پی‌اچ‌پی:
<?php

class a
{
        private 
$Holder = array();


        public function 
setName($name)
        {
                
$this->Holder['name'] = $name;
        }

        public function 
getName()
        {
                return 
$this->Holder['name'];
        }
}

?>


یک منبع خوب که خودم زیاد ازش استفاده بردم همین سایت هست
کد:
http://www.phppatterns.com/docs/?idx=design

به نظرم کسی که می خواد بهترین طراحی رو در کلاس هاش داشته باشه اول باید خود الگو ها یا پترن ها رو بشناسه و هر کودوم رو در جای خودش استفاده کنه


  پاسخ
تشکر شده توسط : alic
#6
ایا بخشی از این پرتال که دارید روش کار میکنید قابل public شدن هست و میشه مثالشو برام قرار بدی ؟
نقل قول:درست بودنش که درسته از نظر سانتکسی. اما هدف از این کلاس چیه و با کلاس زیر چه تفاوتی داره؟ که شما یک کلاس رو ایجاد کردید.
هدف خاصی نداره صرفا مثال زدم تا نشون بدم که چطور از ارث بری استفاده بکنیم ؟ یا نکنیم
شما الان تو این پرتالتون از ارث بری استفاده کردین ؟
خیلی مایلم این پرتال رو ببینم
  پاسخ
تشکر شده توسط :
#7
zoghal جان میشه یه مثال از این پرتال رو بزارید اینجا ؟
یا در صورتی که قابل public نیست pm بزنید ...
  پاسخ
تشکر شده توسط :
#8
خوب من با کیک پی اچ پی دارم انجامش میدم و موارد خاص رو خودم کلاس ایجاد کردن. که شاید اصلا نیازی نبوده که بخواد از کلاس های کیک ارث ببره چون بیشترش استاتیک هست
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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