PDA

View Full Version : مزیت این کلاس چیه؟



sargardoon
پنج شنبه 04 فروردین 1390, 12:00 عصر
داشتم OOP رو یاد میگرفتم یه مثال دیدم میخواستم بدونم مزیت این چیه؟ و چه فرقی با روشی که من اغلب استفاده میکنم چیه؟

class Database {
private $host, $username, $password;

public function __construct($ihost, $iusername, $ipassword) {
$this->host = $ihost;
$this->username = $iusername;
$this->password = $ipassword;
}

public function connect() {
mysql_connect($this->host, $this->username, $this->password)
OR die("There was a problem connecting to MySQL");
}

public function selectDB($dbname) {
mysql_select_db($dbname) OR die ("There was a problem selecting the database");
}
}



$Database = new Database ('localhost', 'root', '');
$database->connect();
$database->selectDB('dbtest');


این هم روشی که من اغلب استفاده میکنم.

function dbconnection($dbhost,$dbuser, $dbpass, $dbname)
{
$con = mysql_connect($dbhost,$dbuser, $dbpass) OR die("There was a problem connecting to MySQL");
mysql_select_db($dbname, $con) OR die ("There was a problem selecting the database");
}

dbconnection('localhost','root', '', 'dbtest');


اگر میشه یک کم درباره کلاس هم توضیح بدید، من زیاد باهاش آشنایی ندارم

eshpilen
پنج شنبه 04 فروردین 1390, 12:21 عصر
همینطوریش هم نگاه کنی مجموعه دستورات روش شیء گرا خوانایی بیشتری دارن. و تازه این اول کاره.
مثلا دستور $database->selectDB('dbtest') از نظر خوانایی خیلی بهتر هست از تشخیص اینکه در دستور dbconnection('localhost','root', '', 'dbtest'); واقعا هر رشتهء پاس شده بعنوان آرگومان چی هست و چه عملیاتی بر اساس اون انجام میشه. موقعی که نامها لزوما نامهای پیشفرض و خیلی تابلو و قابل تفکیکی نباشن این مشکل بیشتر هم برجسته میشه.
لزوما کدی که کوتاهتر باشه بهتر نیست. خوانایی و انعطاف و امنیت و گسترش/تغییر پذیری هم مهم هست.
الان شما میتونی توی کلاس مثلا متدهای دیگری که کارهای مربوط به دیتابیس رو انجام میدن اضافه کنی. مثلا متدی برای Escape کردن رشته هایی که میخوان در کوئری درج بشن و حتی متدهای سفارشی تر و متدهایی که کارهای پیچیده تری رو انجام میدن. درحالیکه با توابع نیاز داری به ازای هر عملیات یک تابع ایجاد کنی و مسائلی مثل اینکه اگر یه زمان چنتا کانکشن همزمان به دیتابیس داشتی چطور تابع رو بر روی هرکدوم از اونها که میخوای اجرا کنی و چطور ظاهر و طرز فراخوانی این تابع ها خوانایی رو پایین میاره و احتمال اشتباهات رو زیاد میکنه.
ببین شما وقتی یک شیء از یک کلاس ایجاد میکنی خوبیش اینه هرجا هرکاری میخوای بکنی روی اون شیء انجام میشه و از سینتاکس و ظاهر کد و اسم اون شیء همه چیز دقیقا روشن و بدون ابهام میشه و کمتر ممکنه اشتباه کنی.
تازه اینا فقط چند مورد جزیی بود که بنظرم رسید. در عمل شیء گرایی مزایای بیشتری هم داره که دوستان با تجربه تر که وقتش رو دارن احتمالا میتونن راهنمایی بیشتری در این ارتباط داشته باشن.
مثلا شما فکر کن مثلا یک دادهء خاصی رو هم که به عملیات خاص شما ارتباط داره میخوای ذخیره کنی. در روش تابعی باید این دیتا رو در یک متغییر جداگانه در حوزهء نامگذاری عمومی کل برنامه تعریف کنی که یکی از عوارضش احتمال برخورد نامهای مختلف بخشها و عملیات مختلف برنامه با همدیگر هست. درحالیکه در کلاس و شیء این مشکلات وجود ندارن. و ضمنا میتونی کلاسها سفارشی تری هم ایجاد کنی. مثلا یک کلاس ویژهء یک کاربر داشته باشی که یک نمونه از شیء اتصال دیتابیس رو مورد استفاده قرار میده، ولی متدها و متغییرهای ذخیرهء داده های مربوط به کاربر خاص رو هم داره.
بنظرم عمدهء مزیت شیء گرایی بخاطر همین کپسوله کردن کد و داده ها/متغییرهای مرتبط هست و اینکه این شلوغی و در دسترس عمومی بودن رو از حیطهء عمومی برنامه جمع میکنه و به داخل یک شیء و فضای نامی مختص خودش میبره. این از تصادم و استفادهء اشتباه تاحد زیادی جلوگیری میکنه.
بجز اینا مزیت های دیگری هم در ویژگیهای پیشرفته تر شیء گرایی وجود دارن. اما اینایی که گفتم میشه گفت اساس شیء گرایی و مهمترین مزایای پایه ای هست.
مزیت شیء گرایی در برنامه های کامل بزرگ تر و پیچیده تر هست که کاملا احساس میشه.
چون اونجا شلوغی و پیچیدگی و اشتباه به حد زیادی بالا میره و اگر شما ابزار مدیریت و طبقه بندی براشون نداشته باشی در یک کد پیچیده و حجیم گم و از برنامه نویسی متنفر میشی.
در یه مغازه ای که اجناس کمی داره احتمالا نیازی به دسته بندی بر اساس نوع اجناس و سیستم خاصی برای برچسب گذاری قیمت و راحت کردن پیدا کردن اجناس نیست، اما در یک سوپرمارکت بزرگتر که جنسهای زیادی داره چطور؟

sargardoon
پنج شنبه 04 فروردین 1390, 13:21 عصر
ممنونم eshpilen (http://barnamenevis.org/member.php?148005-eshpilen) عزیز
چون تا به حال از کلاس چیزی نمیدونستم (حالا دارم شی گرایی رو یاد میگیرم) بیشتر یه فایل به عنوان تابع میساختم و هر کجا میخواستم آنرا صدا میزدم و اگر لازم بود مقادیری برای آن ارسال بشه رو میفرستادم مثلا همین مثال بالایی که نوشتم رو به اسم connect.php ذخیره میکردم و در اول برنامه بازش میکردم و مقدار دهی میکردم و اشتباه من هم این بود که
لزوما کدی که کوتاهتر باشه بهتر نیست. خوانایی و انعطاف و امنیت و گسترش/تغییر پذیری هم مهم هست. فکر میکردم هرچه تعداد خطوط برنامه کمتر باشه بهتره.

به هر صورت ممنونم از توضیحاتتون، اگر دوستان دیگر نظری دارند لطفا توضیح بدید.