Dodawnie argumentów do metody ?, kiedy ?

0

Witam a więc mam dość nietypowy a zarazem poważny problem .Chodzi mi o to ze duża liczba osób [profesorowie, koledzy programiści itd] zwraca mi uwagę ze dobrze znam i umiem sie posługiwać oop , tylko moim czarnym kotem są argumenty metod , tzn nie wiem w jakiej chwili i kiedy mam zdeklarować jakaś zmienną jako argument metody
i dlaczego mam tak postępować .Po prostu nie mogę tego zał pac moi profesorowie mówią ze to kwestia czasu [wyczucia] i ze dużo osób ma z tym problem .Dobrze może ma racje czas ale pisze już w php i javie obiektowo może z 7 miesięcy, myślę ze to nie mało ani nie dużo ale umiem sie posługiwać oop w miarę dobrze , nie mogę powiedzieć ze perfekcyjnie bo do tego trzeba doświadczenia i to kilku letniego .Może wy wiecie dlaczego tak sie dzieje ?,macie jakieś sugestie ?.Mam nadzieje ze ktoś mi opisze ten problem w miarę dobrze , mogą też być przykłady .I proszę nie odsyłać do innycg stron bo wszystkie które były możliwe już przeczytałem

0

A mozesz podac przyklady tego zlego 'argumentowania'? Bo jakos nie moge zaczaic do konca o jaki rodzaj problemu Ci chodzi.

0

Zerknij na to http://forum.php.pl/OOP_Problem_z__klasa___resjestracji_t78091.html
,będziesz wiedział o co mi chodzi tak do końca tak samo
to

#include &ltiostream.h>
     
     int wczytaj(int arg) {
         int L;
         
         cout << "Cześć! Tu funkcja wczytaj(int arg)." << endl;
         cout << "Wywołana zostałam z liczbą o wartości: " << arg;
         cout << endl << "Podaj liczbę: ";
         cin >> L;
         cout << "Wczytałam ją do lokalnej zmiennej L" << endl;
         cout << "Zwracam iloczyn arg*L" << endl;
}

Chodzi mi o to ze podobno zle robie ze nie których zmiennych lub właściwości nie podaje jako argument jakies metody , ale z skąd mam wiedzieć kiedy mam ją tam dać i po co tego właśnie nie rozumie .Myślę ze pomożecie </u>

O tutaj podam taki przykład


<?php
class ShopProduct {
    public $title;
    public $producerMainName;
    public $producerFirstName;
    private $price;
    public $discount = 0; 
    
    function __construct(   $title, $firstName, 
                            $mainName, $price, 
                            $numPages=0, $playLength=0 ) { 
        $this->title             = $title;
        $this->producerFirstName = $firstName;
        $this->producerMainName  = $mainName;
        $this->price             = $price;
    }

    function setDiscount( $num) { /// Co to da ? czy ja w metodzie  dam  jako argument $num  czy ja go nie dam to  tak ta klasa działa 
        $this->discount=$num;
    }

    function getPrice() {
        return ($this->price - $this->discount);
    }

    function getProducer() {
        return "{$this->producerFirstName}".
               " {$this->producerMainName}";
    }

    function getProductXml() {
        // pusta implementacja
    }
}

class CdProduct extends ShopProduct {
    public $playLength = 0;

    function __construct(   $title, $firstName, 
                            $mainName, $price, $playLength ) { 
        parent::__construct(    $title, $firstName, 
                                $mainName, $price );
        $this->playLength = $playLength;
    }

    function getPlayLength() {
        return $this->playLength;
    }
    
    function getProductXml() {
        return '<product type="cd" />';
    }
}

class BookProduct extends ShopProduct {
    public $numPages = 0;

    function __construct(   $title, $firstName, 
                            $mainName, $price, $numPages ) { 
        parent::__construct(    $title, $firstName, 
                                $mainName, $price );
        $this->numPages = $numPages;
    }

    function getProducer() {
        return strToUpper( parent::getProducer() );
    }

    function getNumberOfPages() {
        return $this->numPages;
    }
    
    function getProductXml() {
        return '<product type="książka" />';
    }
}

$product1 = new BookProduct(    "Moja Antonia", "Willa", "Cather", 59.99, 300 );
$product2 =   new CdProduct(    "Exile on Coldharbour Lane", 
                                "The", "Alabama 3", 25.99, 60.33 );
$product1->setDiscount( 1 );
print $product1->getPrice();
print "\n";
$product1->price;
print "Cena wynosi $product1->price\n";
print "\n";
print "Autor:         ".$product1->getProducer()."\n";
print "Liczba stron:  ".$product1->getNumberOfPages()."\n";
print "Wykonawca:     ".$product2->getProducer()."\n";
print "Czas nagrania: ".$product2->getPlayLength()."\n";

function setDiscount( $num) { /// Co to da ? czy ja w metodzie dam jako argument $num czy ja go nie dam to tak ta klasa działa
$this->discount=$num;
}
O to mi mniej więcej chodzi

0

albo ni eumiesz wyrazic co masz na mysli, albo Ci sie cos pokaszanilo totalnie..
patrzac na setter:

function setDiscount( $num) {
    $this->discount=$num;
}

to jak ten setter moglby dzialac bez tego parametru..?

function setDiscount( /*bez*/) { 
     $this->discount= ?ile?;
}

a moze nie chodzi Ci o parametry metody (tu: $num w setterze setDiscount) tylko chodzi Ci o sens istnienia tego settera? sens jest taki, ze piszac w ten sposob, dostarczasz obiektowi mozliwosci reakcji probe zmiany jego zmiennych - np. wyswietlenie komunikatu, sprawdzenie poprawnosic nowej wartosci itp. oczywiscie bedzie tak, tylko jesli wszyscy uzytkownicy obiektu beda mili i ni ebeda uzywali bezposredniego dostepu do zmiennej $discount. U Ciebie ta zmienna jest publiczna i az sie prosi zeby ja ruszac z pominieciem settera. powinna byc prywatna - wtedy kazda operacja na niej bedzie przechodzic przez getter/setter.

...a jesli taka reakcje/testwartosci/itp nie sa wymagane, to rzeczywiscie ta zmienna moze sobie byc publiczna i wtedy, uwaga, istnienie zarowno getterow jak i setterow calkowicie traci sens i nie ma co sie meczyc w generowanie szablonowych get/setX ktore jedynie a slepo cos przekazuja dalej. jak Ci profesorzy nawet w takich przypadkach kaza to robic, no to coz.. sluchaj i rob poki musisz. potem rob rozsadnie.

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