Programowanie obiektowe - zadanie. Metody, klasy, pola

0

Dzień dobry, otrzymałem zadanie w którym należy utworzyć klasę auto, w której będą metody - przyspiesz (zwiększającą prędkość o 5), - zwolnij (zmniejszającą prędkość o 5). Prędkość nie powinna mieć wartości ujemnej.
Następnie tworzyć klasę potomną: osobowka i zdefiniować metody: wsiadanie (+1 pasażer), wysiadanie (-1 pasażer), zdefiniować pole max_liczba_pasazerow
Aby mógł wysiąść ostatni pasażer (kierowca) samochód musi stać (prędkość = 0). Liczba pasażerów w osobowce nie może przekroczyć wartości max.
Utworzyć klasę potomną (od auto) - cieżarówka. Zdefiniować metody: zaladuj (+10 ladunku), rozladuj (-10 ladunku), zdefiniować pole - max_ladunek
Zaladunek i rozladunek są możliwe jedynie gdy ciezarówka się nie porusza. Wartość ladunku nie może przekroczyć max.

Zadanie wydaje się dość proste natomiast wyskakuje mi bląd w lini 29, czyli " if ($this->liczba_pasazerow > max_liczba_pasazerow)". I teraz moje pytanie jest to bląd związany ze składnią czy może potrzebuje tutaj utworzyć osobnę pole dla tej metody?
Proszę jedynie o wskazówki, nie o rozwiązanie zadania.
Z góry dziękuje za pomoc.

<?php

class auto 
{
	public $predkosc;
	public $ladunek;
	public $liczba_pasazerow;


function przyspiesz()
{
	return $this -> predkosc + 5;
}	

function zwolnij()	
{
	if($this -> predkosc > 0)
		$this->predkosc-5;
}
		
} //koniec klasy auto 

class osobowka extends auto
{
	public $max_liczba_pasazerow=4;
	
	function wsiadanie()
	{
		 if ($this->liczba_pasazerow > max_liczba_pasazerow)
			 echo "Brak dostępnych miejsc";
		 else
			$this->liczba_pasazerow+1;		
	}
	function wysiadanie()
	{
		 if ($this->predkosc == 0 && liczba_pasazerow > 0) 
			$this-> liczba_pasazerow-1;
	}
	
}//;koniec klasy potomnej osobowka

class ciezarowka extends auto
{
	public $max_ladunek = 3500; //w kg 
	
	function zaladuj()
	{
		if ($this-> predkosc==0 && ladunek < max_ladunek)
			$this-> ladunek+10; 
		
	}
		
		
	function rozladuj()
	{
		if ($this predkosc ==0 && ladunek > 9)
			$this->ladunek-10;
	}
}//koniec klasy potomnej ciezarowka 

$osobowka = new osobowka();
$ciezarowka = new ciezarowka(); 

$osobowka -> przyspiesz();
$osobowka -> zwolnij();
$osobowka -> wsiadanie();
$osobowka -> przyspiesz();
$osobowka -> zwolnij();
$osobowka -> wysiadanie();




?>

2

if ($this->liczba_pasazerow > max_liczba_pasazerow)

Co to jest max_liczba_pasazerow? Jest to ewidentny błąd składni.

Poprawny zapis:

if ($this->liczba_pasazerow > $this->max_liczba_pasazerow)

Pytanie, czemu używasz pól publicznych a nie chronionych (protected)?

0

@N3: na razie chciałem tylko przetestować czy działa dla publicznych i później przekształcić dla protected.

2

Wszystko masz zle, wsiadanie i wysiadanie tez powinno byc jako metoda w auto no bo co ? do ciezarowki juz nie mozna wsiasc ? a ilosc miejsca powinna byc jako parametr w konstruktorze. Nigdy w klasie nic na sztywno nie ustawiaj. No i nazwa klasy z duzej litery czyli Auto, Osobowka, Ciezarowka

$osobowka = new osobowka($miejsc = 5);
$ciezarowka = new ciezarowka($miejsc = 2); 

no i tutaj babol

$this -> predkosc + 5; 

powinno byc

$this -> predkosc += 5;

Jak masz publiczne zmienne to zobacz co pokazują

$osobowka-> zwolnij();
$osobowka->predkosc;

a jak zrobisz chronione to dodaj gettery zeby wiedziec jaka masz predkosc i ile pasazerow

$osobowka->zwolnij();
$osobowka->getSpeed();
3

Prędkość nie powinna mieć wartości ujemnej.

Dlaczego nie? A jak do tyłu jedzie? XD

Następnie tworzyć klasę potomną: osobowka

To takie wciskanie na siłę dziedziczenia.

A tak naprawdę żadnego dziedziczenia tu nie potrzebujesz :D
Wystarczy klasa, która będzie mieć parametry:

  • maksymalna liczba osób (do ciężarówki też się da wejść).
  • maksymalna ilość załadunku (do osobówki też się coś da spakować)
  • parametry takie jak prędkość (maksymalna i aktualna), przyśpieszenie czy inne w zależności od tego, jak szczegółowo to ma symulować rzeczywistość.
  • rodzaj samochodu (osobówka / cieżarówka / autobus / itp. jakbyśmy chcieli wiedzieć, co dokładnie jedzie), czyli może to być choćby zapisane jako string, albo jako liczba oznaczająca rodzaj rodzaj samochodu (np. osobówka - 1, ciężarówka - 2, autobus - 3 itp.) albo jako enum itp.

klasę auto, w której będą metody - przyspiesz (zwiększającą prędkość o 5), - zwolnij (zmniejszającą prędkość o 5).

ale dlaczego przyśpieszenie ma być sztywno zdefiniowane? Czyli Tesla będzie miała takie samo przyśpieszenie jak nasz polski Maluch? o.O Gdzie tu sens? To też jako parametr powinno być.

Dzień dobry, otrzymałem zadanie

Cały czas to samo. Czyli ludzie wymyślajacy zadania po raz kolejny idą w ch... i nie mieli chyba nigdy do czynienia z faktycznym programowaniem poza uczelnią/szkołą (właśnie, to zadanie na studia? Czy gdzie? Możesz nie wymieniać nazwy konkretnej instytucji).

0

@LukeJL: Zadanie na studia. "Doktor, który mówi, że ma podejście praktyczne XD"

2
LukeJL napisał(a):

To takie wciskanie na siłę dziedziczenia.
Czyli ludzie wymyślajacy zadania po raz kolejny idą w ch... i nie mieli chyba nigdy do czynienia z faktycznym programowaniem poza uczelnią/szkołą (właśnie, to zadanie na studia? Czy gdzie? Możesz nie wymieniać nazwy konkretnej instytucji).

Muszą wymyślać takie przykłady, bo bardziej ambitnych, chociażby z książek Roberta Martina, nikt by nie zrozumiał. Zresztą i prostych przykładów 2/3 studentów nie załapie przez większą część semestru. Dopiero koło sesji część zaczyna coś jarzyć :-)

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