Czy to jest już programowanie obiektowe?, Ocena klasy

0

Witam, od dłuższego czasu próbuje zrozumieć istotę pisania obiektowo i idzie to dosyć topornie.
Prosiłbym o wypowiedź (ocenę) doświadczonych programistów z tego zakresu.

Zamieszczam przykładową klasę, którą napisałem (przechowuje tymczasowe dane w bazie np. dla operacji z potwierdzeniem...połączenie idei plików tymczasowych, rejestru windows i śmietnika..)

<?php
/**
 * TMP CLASS
 * @package Ecrosio
 * @author Dominik Zawadzki
 */
 
 /**
 * Klasa TMP
 *
 * do przechowywania tymczasowych danych w bazie
 * @package Ecrosio
 * @author Dominik Zawadzki
 * @copyright 2013 GNU GENERAL PUBLIC LICENSE
 */
 class tmp {
	
	/**
     * Uchwyt do bazy ecrosio
	 * @access private
     * @var db
     */
	private $db;
	/**
    * nazwa modulu
    * @access private
	* @var string
    */
	private $module;

	public function __construct($db,$name) {
	$this->db = $db;
	$this->module = $name;
	}

	/**
	 * Funkcja dodajaca wartosc do bazy
	 *
	 * Jesli parametr name wystepuje juz w bazie funkcja doda wartosc ponownie ale ze zmieniona nazwa. Funkcja maksymalnie 50 razy moze zmieniac nazwe.
	 *
	 * @access public
	 * @param string name Nazwa klucza
	 * @param string value Wartosc klucza
	 * @param date termin Data po ktorej zostanie klucz usuniety (jesli nie podano system skasuje wg. wlasnego uznania) format rrrr-mm-dd
	 * @return bool|string true w przypadku powodzenia, false w przybadku bledu zapisu lub nazwy lub String z nazwa zmieniona klucza, gdy funkcja bedzie musiala zmienic nazwe klucza
	 */
	public function add($name,$value,$termin='',$alt=false) {
		
		$alternatywa = '';
		
		if($this->select($name) == TRUE) { //istnieje juz klucz o podanej nazwie

			static $counter = 0;
			$counter++;
			
			if($counter > 50) { //ochrona stosu
			return false;
			}
			
			$alternatywa = $name.$counter;
			$odp = $this->add($alternatywa,$value,$termin,true);
			if($odp !== FALSE)
				return $odp;
			
		}else{
			$add = $this->db->prepare("INSERT INTO tmp VALUES ('',:file,:name,:value,now(),:termin)");
			$add->bindValue(':file',$this->module);
			$add->bindValue(':name',$name);
			$add->bindValue(':value',$value);
			$add->bindValue(':termin',$termin);
			$response = $add->execute();
			if($alt) return $name;
			if($response == 1)  return true; else return false;
		}
	}
	
	/**
	 * Funkcja zwracajaca wartosc klucza lub zwracajaca tablice ze wszystkimi kluczami danego modulu
	 *
	 * W przypadku braku podania nazwy klucza, funkcja zwroci wszystkie klucze danego modulu
	 *
	 * @access public
	 * @param string $name Nazwa klucza (nieobowiazkowy)
	 * @return Bool|String|Array Zwroci false w przypadu bledu, string gdy podano nazwe klucza i znaleziono wartosc, Array w przypadku gdy nie podano nazwy klucza a funkcja znalazla wszystkie rekordy kluczy danego modulu
	 */
	public function select($name='') {
		
		if($name != '') {
		
			$select = $this->db->prepare("SELECT value FROM tmp WHERE ( file=:file AND name=:name)");
			$select->bindValue(':name',$name);
			$select->bindValue(':file',$this->module);
			$response = $select->execute();
			
			$r = $select->fetchAll();
			
			if(count($r) == 0) return false;
			return $r[0]['value'];
			
		}else{
		
			$select = $this->db->prepare("SELECT name, value FROM tmp WHERE file=:file");
			$select->bindValue(':file',$this->module);
			$response = $select->execute();
			
			$r = $select->fetchAll();
			
			if(count($r) == 0) return false;
			
			return $r;
		}
	}
	
	/**
	 * Funkcja zmieniajaca wartosc klucza w bazie
	 *
	 * Zmienia wartosc na nowa ($value) dla klucza $name
	 *
	 * @access public
	 * @param string name Nazwa klucza
	 * @param string value Wartosc klucza
	 * @return bool True w przypadku sukcesu, False w przypadku bledu
	 */
	public function update($name,$value) {
	
		$update = $this->db->prepare("UPDATE tmp SET value=:value WHERE ( file=:file AND name=:name)");
			$update->bindValue(':name',$name);
			$update->bindValue(':file',$this->module);
			$update->bindValue(':value',$value);
			
			$response = $update->execute();
			
			if($response == 0) return false; else return true;
			
	}
	
	/**
	 * Funkcja usuwajaca klucz
	 *
	 * Usuwa klucz wskazany w parametrze
	 *
	 * @access public
	 * @param string name Nazwa klucza
	 * @return bool True w przypadku sukcesu, False w przypadku bledu
	 */
	public function delete($name) {
		$delete = $this->db->prepare("DELETE FROM tmp WHERE ( file=:file AND name=:name)");
			$delete->bindValue(':name',$name);
			$delete->bindValue(':file',$this->module);
			
			$response = $delete->execute();
			
			if($response == 0) return false; else return true;
	}
	
	/**
	 * Funkcja usuwajaca wszystkie klucze danego modulu
	 *
	 * @access public
	 * @return bool True w przypadku sukcesu, False w przypadku bledu
	 */
	public function clear() {
		$clear = $this->db->prepare("DELETE FROM tmp WHERE file=:file");
			$clear->bindValue(':file',$this->module);
			
			$response = $clear->execute();
			
			if($response == 0) return false; else return true;
	}
	
 }
?>
2

Witaj kolego, nie zagłębiłem się bardzo w twój kod ale wydaje mi się że skoro używasz obiektów to znaczy że programujesz obiektowo.

0

hehe, dzięki adam_vip, ale chodzi mi bardziej czy to co pisze jest sensowne pod względem hmm...ojej powiem górnolotnie "inżynierii oprogramowania", standardów - bo nie wiem dokładnie jak to nazwać...czy powinienem stosować jakiś wzorzec projektowy itp.

0

Wygląda jak zwykła klasa, bez jakiś rażących błędów, zmiennych globalnych czy tym podobnych. Śmieszy mnie nieco, że masz "name", "value", "add" oraz "termin". Tak samo niektóre zmienne w metodach nazywasz po polsku - lepiej trzymać się jednej konwencji, w mojej opinii.

Nawiasem:
if($response == 0) return false; else return true; możesz zastąpić przez return ($response == 0).

0
if($this->select($name) == TRUE) { //istnieje juz klucz o podanej nazwie
 
                        static $counter = 0;
                        $counter++;
 
                        if($counter > 50) { //ochrona stosu
                        return false;
                        }
 
                        $alternatywa = $name.$counter;
                        $odp = $this->add($alternatywa,$value,$termin,true);
                        if($odp !== FALSE)
                                return $odp;
 
}

WAT? co ten counter niby robi? dla mnie - nic

0

dzek69, counter dodaje w nazwie przedrostki od 1 do 50 gdy chce się dodać klucz który już istnieje (musi być unikatowy)

0

Prawdziwe programowanie obiektowe to nie tylko same klasy ale także polimorfizm. Połączenie poliformizmu z klasami daje OOP - czyli object oriented programming. Polimorfizm sprawia że kod programu staje się obiektowo orientowalny.

0

edit:

yy, ok, nieważne,
nie wiedziałem o takim dziwnym tworzeniu zmiennych w obiektach

0
datamining napisał(a):

Prawdziwe programowanie obiektowe to nie tylko same klasy ale także polimorfizm. Połączenie poliformizmu z klasami daje OOP - czyli object oriented programming. Polimorfizm sprawia że kod programu staje się obiektowo orientowalny.

kompozycja >>>> dziedziczenie

Przynajmniej w części przypadków.

1 użytkowników online, w tym zalogowanych: 0, gości: 1