Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania
Viewing all articles
Browse latest Browse all 65225

Programowanie obiektowe - porady.

$
0
0

Witam, stworzyłem prosty kod dot. tworzenia postaci, jego profesji i jego podstawowych parametrow tj. sila, magia, zrecznosc. Nic skomplikowanego, bo nie na tym mi teraz zalezy. Probuje ogarnac programowanie obiektowe i zaleznosci pomiedzy obiektami. Proszę o sprawdzenie mojego krótkiego kodu i wystawienie opinii/ porady co powinienem zmienic, na co zwracac uwage itd.

Wydaje mi sie, ze kod, ktory stworzylem ma za duzo zaleznosci pomiedzy obiektami tj. ~jeden obiekt za bardzo wplywa na drugi. 

<?php 
//INDEX.php

require_once 'bootstrap.php'; //autoload 

use Params\Params;
use Proffesion\Proffesion;
use Proffesion\Knight;
use Character\Character;
use Params\ShowParams;

$character = new Character($params=new Params(), new Knight($params));

$character->getInstanceOfParams()->increaseStrength(10);
echo ShowParams::normalShow($character->getInstanceOfParams());
echo "Profesja: ".$character->getInstanceOfProffesion()->getProffesion();

 

<?php
namespace Proffesion;

use Params\Params;

abstract class Proffesion
{   
    
    function __construct(Params $params, $strength=0, $agility=0, $magic=0)
    {
        $params->setParams($strength, $agility, $magic);
    }
    
    abstract public function getProffesion();
}

 

<?php
namespace Proffesion;

use Params\Params;

class Knight extends Proffesion 
{
    
    public function __construct(Params $params, $strength=10, $agility=4, $magic=1)
    {
        parent::__construct($params, $strength, $agility, $magic);
    }
    
    public function getProffesion()
    {
        return 'Knight';
    }
    
}

 

<?php

namespace Params;

class Params 
{
    private $strength;
    private $agility;
    private $magic;
    
    public function setParams($strength, $agility, $magic)
    {
        $this->strength=$strength;
        $this->agility=$agility;
        $this->magic=$magic;
    }
    
    public function increaseStrength($value)
    {
        $this->strength+=$value;
    }
    
    public function increaseAgility($value)
    {
        $this->agility+=$value;
    }
    
    public function increaseMagic($value)
    {
        $this->magic+=$value;
    }
    
    public function getParams()
    {
        return array($this->strength, $this->agility, $this->magic);
    }
    
    public function getStrength()
    {
        return $this->strength;
    }
    
    public function getAgility()
    {
        return $this->agility;
    }
    
    public function getMagic()
    {
        return $this->magic;
    }
    
}

 

<?php
namespace Character;

use Params\Params;
use Proffesion\Proffesion;

class Character 
{   
    private $params;
    private $proffesion;
    
    public function __construct( Params $params, Proffesion $proffesion)
    {
        $this->params=$params;
        $this->proffesion=$proffesion;
        
    }
    
    public function getInstanceOfParams()
    {
        return $this->params;
    }
    
    public function getInstanceOfProffesion()
    {
        return $this->proffesion;
    }
}

 

<?php

namespace Params;

class ShowParams 
{
    static public function normalShow(Params $params)
    {
        $result=$params->getParams();
        $return = "Strength: ".$result[0]."<br>";
        $return .= "Agility: ".$result[1]."<br>";
        $return .= "Magic: ".$result[2]."<br>";
        return $return;
    }
}

 

Czy takie rozwiazanie jest wgl poprawne: (Knight.php)


public function __construct(Params $params, $strength=10, $agility=4, $magic=1)
    {
        parent::__construct($params, $strength, $agility, $magic);
    }

 

Czy tworzenie instancji jak tutaj jest zrobione poprawnie, czy moze lepiej te poszczegolne w wlasciwosciach najpierw przypisac do zmiennych a potem te zmienne przekazac do konstruktora? :

$character = new Character($params=new Params(), new Knight($params));

 

czyli $params=new Params(); $prof = new Knight($params); $char = new Character($params, $prof); ??

 

I jeszcze chciałbym poznac opinie dot takiego rozwiazania: 

$character->getInstanceOfParams()->increaseStrength(10);
echo ShowParams::normalShow($character->getInstanceOfParams());
echo "Profesja: ".$character->getInstanceOfProffesion()->getProffesion();

 

Chodzi mi o metody wewnatrz klasy Character tj. getInstanceOfProffesion oraz getInstanceOfParams. Czy moze lepiej byloby wewnatrz klasy Character dodac metody, cos takiego: pub func increaseStrength($num) { $this->params->increaseStrength($num); } i wywolac to tak: $character->increaseStrength(10); < Te rozwiazanie jakos sie nazywalo, ale nie pamietam jak. W jednym obiekcie metoda o takiej samej nazwie wykorzystuje inny obiekt do zrobienia jej roboty (takie wyslugiwanie sie innym obiektem, a sam leniuchuje)

Czekam na jakies wskazowki! Dzieki

 

edit. Chcialbym sie jeszcze dowiedziec czy uzywam poprawnie przestrzeni nazw.

Zdjecie z drzewem katalogow: http://screenshot.sh/mFdv0ZwieoW4m


Viewing all articles
Browse latest Browse all 65225

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>