|
|
|
| До сих пор не могу понять, в чем же преимущество использования классов ?! Объясните, чем же они так лучше обычных функций ? Ведь это получается почти другой язык внутри языка... не понимаю смысла. | |
|
|
|
|
|
|
|
для: DDK
(07.11.2006 в 19:23)
| | Дело в том, что само по себе объектно-ориентированное программирование не является панацей или "серебряной пулей" — это рабочая технология, которая позволяет:
- Увеличить процент повторно используемого кода
- Оперировать при программировании понятиями и объектами реального мира (договор, заключение договора, распечатка договора, поиск договора), а не низкоуровневыми компьютерными терминами (файлы, строка, стандартный поток вывода), что позволяет создавать более крупные проекты с меньшим количеством ошибок и в более сжатые сроки.
Использование объектно-ориентированного подхода к месту и не к месту не приводит автоматически к успешному проекту. Программирование новичка в стиле объектно-ориентированного программирования часто напоминает переход по минному полю — если не знать где мины, успешное достижение конца проекта невозможно. Например, создаётся гостевая книга, пишется класс для помещения информации в базу данных или файл и класс для вывода этой информации из базы данных. В результате код в 3 раза превышает код, который использовался бы без объектно-ориентированного подхода. Разумеется, ни о каком повторном его использовании речи не идёт, так как гостевая книга разработана один раз и больше классы нигде не нужны. Прозрачные, выверенные, отточенные в течении десятилетий на нескольких языках программирования интерфейсы доступа к файлам (или базе данных) заменяются на свой собственный интерфейс, который не известен никому кроме разработчика. В результате читабельность программы только уменьшается. Кроме того, так как код гостевой книги зачастую мал, ни о каком программировании в терминах реального мира речи не идёт — разработчик по прежнему программирует в терминах компьютерного мира (класс доступа к файлу, класс вывода содержимого файла).
Преимущество ООП проявляются на больших проектах, когда можно действительно повторно использовать код или мыслить в рамках объектов реального мира, например, при разрботке операционной системы или библиотеки классов обслуживающих графику. Использовать ООП на мелких проектах, это всё равно что ездить на скоростном болиде по московским пробкам - одни не удобства. Теоретически вы сможете на нём проехать, но вообще его преимущества перед другими машинами проявляется совершенно в других условиях.
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=161
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3061
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=6076
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=11514 | |
|
|
|
|
|
|
|
для: cheops
(07.11.2006 в 22:08)
| | Спасибо, Игорь, за такой прекрасный ликбез ! Теперь всё понял. | |
|
|
|
|
автор: AtomicBlast (08.11.2006 в 12:34) |
|
|
для: cheops
(07.11.2006 в 22:08)
| | Структура базы данных - таблица gb
Класс для подключения к базе данных MySQL
class DataBase
{
private $dbHost, $dbName, $dbUser, $dbPassword, $dbLink, $dbResult;
public function __construct($dbHost, $dbName, $dbUser, $dbPassword, $dbLink, $dbResult)
{
$this->dbHost = $dbHost;
$this->dbName = $dbName;
$this->dbUser = $dbUser;
$this->dbPassword = $dbPassword;
$this->dbLink = @mysql_connect($this->dbHost, $this->dbUser, $this->dbPassword);
@mysql_select_db($this->dbName);
}
public function __destruct()
{
@mysql_close($this->dbLink);
}
public function Query($sql)
{
if($this->dbResult = mysql_query($sql))
return true;
else
return false;
}
public function dbToArray($sql)
{
$this->dbQuery($sql);
if(($this->dbNumRows($sql)) > 0)
{
while($tmp=@mysql_fetch_array($this->dbResult))
{
$data[]=$tmp;
}
return $data;
}
else
{
return false;
}
}
public function dbNumRows($sql)
{
$this->dbQuery($sql);
$row = @mysql_num_rows($this->dbResult);
return $row;
}
}
|
Класс гостевой книги
class GuestBook
{
public $id, $fio, $date, $email, $msg;
public function __construct($id, $fio, $date, $email, $msg)
{
$this->id = $id;
$this->fio = $fio;
$this->date = $date;
$this->email = $email;
$this->msg = $msg;
}
}
|
Рабочий класс для работы с б.д.
class GuestBookDb
{
private $db
public function __construct($db)
{
$db = $db;
}
public function Select()
{
$sql = "SELECT * FROM gb";
$dbArray = $this->db->dbToArray($sql);
if($this->db->dbNumRows($sql)>0)
{
foreach($dbArray as $dbAr)
{
$myArray[] = new GuestBook($dbAr['id'], $dbAr['fio'], $dbAr['date'], $dbAr['email'], $dbAr['msg']);
}
return $myArray;
}
else
{
return false;
}
}
public function SelectWithId($id)
{
$sql = "SELECT * FROM gb WHERE id = '$id'";
$dbArray = $this->db->dbToArray($sql);
if($this->db->dbNumRows($sql)>0)
{
foreach($dbArray as $dbAr)
{
$myArray = new GuestBook($dbAr['id'], $dbAr['fio'], $dbAr['date'], $dbAr['email'], $dbAr['msg']);
}
return $myArray;
}
else
{
return false;
}
}
public function Insert($obj)
{
$sql = "INSERT INTO gb (fio, date, email, msg) VALUES ('$obj->fio', '$obj->date', '$obj->email', '$obj->msg')";
$this->db->dbQuery($sql);
}
// Методы для обновления и удаления записей
}
|
Рабочий код для вывода...
Расписывать класс не буду... Идея в том, что надо работать (при выборке) с массивами объектов... типа, так:
$db = new DataBase($dbHost, $dbName, $dbUser, $dbPassword, $dbLink, $dbResult);
$gb = new GuestBookWork($db);
$array = $gb->Select();
foreach($array as $ar)
{
//$ar->fio, $ar->date etc
}
|
Чтобы произвести вставку в базу данных надо:
$db = new DataBase($dbHost, $dbName, $dbUser, $dbPassword, $dbLink, $dbResult);
$gb = new GuestBookWork($db);
$gbNew = new GuestBook(null, $fio, $date, $email, $msg);
$gb->Insert($gbNew);
|
В общем где-то так... | |
|
|
|
|
автор: AtomicBlast (08.11.2006 в 12:37) |
|
|
для: AtomicBlast
(08.11.2006 в 12:34)
| | Малех ошибся... не GuestBookWork, а GuestBookGb :) | |
|
|
|
|
автор: AtomicBlast (08.11.2006 в 12:38) |
|
|
для: AtomicBlast
(08.11.2006 в 12:37)
| | GuestBookDb... блин... вот что работа с человеком делает.... :( | |
|
|
|
|