Activitats
POO Bàsic
-
301-Card
: Crea una classe anomenadaCard
que contindrà la informació relativa una carta de la baralla francesa amb les seguents propietats:suit
, string, privada.symbol
, string, privada.value
, entera, privada.
El constructor i el seus getters i setters.
Crea cinc objects diferents en un array i mostra'ls de forma aleatòria.
classDiagram class Card { -string suit -string symbol -int value +void function __construct (string, string, int) } -
302-CardCollection
: Crea una classe anomenadaCardCollection
que contindrà la propietatcards
que serà un array de cartes (objectesCard
).Hi haurà dues formes d'inserir cartes, mitjançant el mètode
CardCollection::add(array $array)
que rebrà un array de cartes i els afegirà a la propietatcards
i el mètodeCardCollecion::addCard(Card $card)
que rebrà una carta i la inserirà en la propietatcard
.A més, contindrà el mètode
shuffle()
que ordenarà les cartes de forma aleatòria.Instància la classe, afig 5 cartes, reordena-les i mostra-les.
classDiagram class CardCollection { -cards: array +add(cards: array) +addCard(card: Card): void } class Card { -suit: string -symbol: string -value: int __construct (suit: string, symbol: string, value: int) shuffle() getCards() array } CardCollection "1"--"*" Card -
303-writer
: crea el mètodowriter
en la classeCardCollection
de forma que mostre en format lliure la col·leció de cartes. Amb aquest mètode afegirem una nova capa d'abstracció ja que no caldrà accedir directament als mètodes de la classeCard
. Afig un segon mètode que mostre la col·lecció de cartes en una imatge que represente cada carta (les imatges que hem usat en activitats anteriors). -
304-basic-game
: fent ús de les classes anteriors crearem una aplicació bàsica en la que s'enfronten dos jugadors. Un exemple de partida podria ser el següent:La classe
CardCollection
quedarà així:classDiagram class CardCollection { -cards: array add(cards: array) addCard(card: Card) void ... deal(amount: int) array play() Card }Els requisits seran els següents:
- Es repartiran 5 cartes per jugador.
* El mètode
deal
que repartirà el número de cartes que s'indique com a paràmetre eliminant-les de la col·lecció. * El mètodeplay
jugarà una carta que s'eliminarà de la col·lecció. * Cada tirada la guanya el jugador que té la carta més alta, segons el valor. * La partida la guanya el jugador que ha guanyat més vegades. * En cas d'empat es repartirà una nova carta a cada jugador.
Així que en la aplicació interactuaran 3 objectes de tipus
CardCollection
. - Es repartiran 5 cartes per jugador.
* El mètode
-
305-abstract-game
: en l'activitat anterior vam crear tres objectes de tipusCardCollection
. Podem observar que alguns mètodes, com per exempledeal
(repartir) tenen sentit en l'objecte quan representen la mà d'un jugador.Podem replantejar la solució de la següent manera:
classDiagram direction LR class CardCollection { << abstract >> #cards: array +add(cards: Card[]) +addCard(card: Card) void getCards() Card[] } class Card { -suit: string -symbol: string -value: int __construct (suit: string, symbol: string, value: int) } class Deck { shuffle() deal(amount: int = 1) Card[] } class Hand { play() Card } CardCollection "1"--"*" Card Deck --|> CardCollection Hand --|> CardCollectionEn el diagrama anterior definim
CardCollection
com una classe abstracta, d'ella hereten dos classesDeck
que representa la baralla iHand
que representa les cartes d'un jugador. Cada classe exten la funcionalitat afegint els seus propis mètodes.Recorda que una classe abstracta és un tipus de classe que no s'instància i sols poden ser heretades traslladant així un funcionamient obligatori a les classes filles (o subclasses).
Modifica la solució a l'activitat anterior amb la nova jerarquia de classes.
Errors i excepcions
-
306-error-handling
: modifica l'activitat 284 (formulari de contactes) de forma que quan es produisca un error de validació és llance una excepció que serà capturada.Caldrà construir la següent jerarquia d'errors:
ValidationException
serà la classe base i heretaran d'ella les següents subclasses:RequiredValidationException
TooLongValidationException
InvalidPhoneValidationException
InvalidEmailValidationException
.InvalidKeyValidationException
FileUploadException
serà la classe base de la part de pujada de fitxers.NoUploadedFileException
.TooBigFileException
.InvalidTypeFileException
.
Projecte: MovieFX
En primer lloc caldrà crear el lloc web virtual que allotjarà l'aplicació que haurà d'estar en un directori.
Allí disposarem de la següent estructura de directoris:
.
├── index.php
├── src
└── views
src
contindrà les classes i view
les vistes.
Caldrà crear un repositori privat de Github on mantindrem una versió del projecte.
- Crea la classe
Movie
en la carpetasrc
del projecte, cal usar tipat esctricte. Les propietats seran:- id (integer)
- title (string)
- overview (string)
- releaseDate (string)
- rating (float)
- poster (string)
- Crea els setters i els getters.
- Crea la constant de classe
POSTER_PATH
contindrà la ruta al directori on es troben les imatges. - Crea un array
$movies
que siga un array d’objectesMovie
. Crean 3. - Crea la pàgina d'index.php perquè mostre les pel·licules de l'array.
- El títol de la pel·licula serà un enllaç a
movie.php?id=[atribut id de la pel·lícula]
. -
La pàgina
movie.php
mostrarà les dades de la pel·licula que tinga l'id
que s'ha passat pel querystring. Post usararray_filter
per trobar l'objecte que té l'id indicat. -
Crea la classe
User
en la carpetasrc
amb les següents propietats:- id (integer)
- username (string)
- password (string)
- plan (Plan)
-
Crea la classe
Plan
en la carpetasrc
amb les següents propietats:- id (integer)
- name (enumeration: BASIC, PREMIUM)
- quality (enumeration: SD, HD, 4K)
- screens (integer)