Учу ООП. Нужен совет.

alexander.pro

Новичок
Учу ООП. Нужен совет.

Доброго времени...
У меня возникла необходимость в освоении ООП. Занимаюсь программирование на PHP - примерно год, тяжело переходить с процедурного кода на объектный. Эта моя первая, более-менее серьезная работа с ООП кодом. Если вам не трудно, прокомментируйте правильность.

PHP:
     <?PHP
      class Voting{
         private $filename; //  Объявляю свойства класса (filename - имя файла answer - это вариант ответа) 
         private $answer;
         private $vote = Array();
           public function GetAnswer($filename, $answer){
           $this->filename = $filename; // Присваиваем параметры функции свойствам класса
           $this->answer = $answer;
            $file = fopen($this->filename,'r'); // Открываю файл для получения статистики ответов
            $data = fread($file, filesize($this->filename)); // Читаю каждую строку файла (по правде говоря она там одна)
            $this->vote = explode('-',$data);// Разделяю строку ответов в массив
            fclose($file); // Закрываю файл
          }
    
        public function CheckIP($ip){ // Функция для определения IP 
          $counter = count($this->vote);
            if ($this->vote[$counter-1] !== $ip){ // Если IP адрес голосующего  не совпадает с тем, что уже в файле
                $this->vote[$counter-1] = $ip; // Переписываем IP пользователя
                $this->WriteAns(); //Записываем в файл
            }
        }
    
    
          private function WriteAns(){
              $file = fopen($this->filename,'w');
            $this->vote[$this->answer]++;
            $this->data = fwrite($file, implode('-',$this->vote));
            fclose($file);
          }
    
        public function GetPrint($var3){
          return $this->vote[$var3];
          }
     }
    
    ?>
Файл index.php - создание объекта.
PHP:
<?php
require ('./voting.php');
  $vote=new Voting();
  $vote->GetAnswer('./db.dat',2);
  $vote->CheckIP($_SERVER['REMOTE_ADDR']);
  echo $vote->GetPrint(2);
?>
Содержание db.dat - "0-0-3-0-127.0.0.5"
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
правильность определяется на основе правил
чтобы определить правила, надо знать цель и ограничения

Определи цель - зачем ты пишешь код?
Почему возникла "необходимость в освоении ООП"? Обычно к этому приходят с желанием.
Чем ты ограничен в написании кода (фреймверк, API) ?
 

alexander.pro

Новичок
Читал, но дело даже не в этом.
Как ты сказал "Почему возникла "необходимость в освоении ООП"? Обычно к этому приходят с желанием."
Есть желание освоить ООП.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
"ООП - это способ мышления, а не рецепт." (С) HEm

http://ru.php.net/ru/oop
все прочел?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
>как тебе код
чуть менее, чем полностью непонятна цель, которую он реализует
WriteAns нелогично как-то писать в CheckIP

похоже, что ты взял набор функций, обернул их словом class и определил глобальную переменную полем
т.е. к ООП этот код не имеет отношения
 

alexander.pro

Новичок
Ну это скрипт голосования.
А как бы ты предложил его реализовать или может знаешь готовый скрипт(кинь ссылку)
 

fixxxer

К.О.
Партнер клуба
ООП не учат. Его осмысляют.

-~{}~ 06.04.09 01:25:

$this->filename = $filename; // Присваиваем параметры функции свойствам класса

ты такие комментарии всегда делаешь?
 

alexander.pro

Новичок
Нет, меня просто просили подробно комментировать, вот я и комментировал.
Никак не могу понять, что тут неправильно?
Почему здесь нет ООП?

-~{}~ 06.04.09 01:46:

Пытался читать про инкапсуляцию, полиморфизм вроде понятно, только вот примеры приврдятся типа:
PHP:
<?php
class Parent {
function parent_funct() { echo "<h1>Это родительская функция</h1>"; }
function test () { echo "<h1>Это родительский класс</h1>"; }
}

class Child extends Parent {
function child_funct() { echo "<h2>Это дочерняя функция</h2>"; }
function test () { echo "<h2>Это дочерний класс</h2>"; }
}
?>
А реальное применение мало где увидишь... Например - скрипт голосования или гостевой
 

fixxxer

К.О.
Партнер клуба
Потому что ты просто раскидываешь функции и переменные по классам, а не мыслишь объектами и сообщениями.

"Дорогое голосование, а сделай мне получить вывод" - сам вдумайся, бред же. :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
alexander.pro
ООП - не стиль программирования, это так люди придумали, чтобы большие программы поместились в голове программиста.

Придумали люди такое абстрактное понятие, как объект.
Например, некий объект может хранить информацию о голосах - работать с файлами.
У него должны быть методы "записать голос", и "посчитать голоса".
А остальная программа работает с объектом - с переменной и заранее известными методами.

Если надо - ты пишешь другой класс, из которого ты создаешь нужный объект с такими же методами, но вместо файлов он работает с базой данных.
И получается, что ты уже хранишь голоса в базе, а не в файле, а остальная часть программы этого не замечает.

Становится неважно, где объект будет хранить информацию - объект предоставляет "интерфейс" - способ работы с ним.

Если тебе нужно просто хранить голоса в файле, тебе не нужно ООП. Пиши функции и не мучайся, появится реальная задача - изучишь.
 

nerezus

Вселенский отказник
Нет, меня просто просили подробно комментировать, вот я и комментировал.
У одного из программистов был такой код:
PHP:
listoffilestogathersysteminfofromexternalsourcesinoursystem = [] # присваиваем пустой список переменной # а это коментарий # а это тоже коментарий, он коментирует другой коментарий # а это коментарий, коментирующий коментарий, который будет коментирован еще одним # another one
Только вот он понимал, что делал...
 

Alexandre

PHPПенсионер
Учу ООП. Нужен совет.
чего-чего, а советчиков здесь море

а если ближе к делу то нижеуказанная функция (метод) совсем не к месту
public function CheckIP($ip){ // Функция для определения IP
что я хотел сказать - уже за меня высказали....ООП - это образ мышления объектами
у тебя пока этого в коде не наблюдается
например, если есть объект "Голосование", то какие он может выполнять "действия" и какие он может иметь свойства?

почитай умные книжки, например Рефакторинг
 

zerkms

TDD infected
Команда форума
Alexandre
рефакторинг нужно читать уже после того, как поймёшь что и как. вначале нужно книжки по ООАД.
 

Духовность™

Продвинутый новичок
Учу ООП. Нужен совет.
ИМХО, для того, что бы научиться мыслить объектами, нужно в первую очередь понять, что основная задача ООП - это сделать расслоение системы на "независимые" друг от друга компоненты. Независимые в плане идеологии, в первую очередь. Т.е. слово "расслоение" должно быть у кулхацкера ООПшного как доминирующая установка.
 

zerkms

TDD infected
Команда форума
findnext
бугага.... новичку такие книжки??? господа, вы сошли с ума :))))))
 
Сверху