Activitats
POO Bàsic
-
301-Card: Crea una classe anomenadaCardque 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 anomenadaCardCollectionque contindrà la propietatcardsque 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 propietatcardsi 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ètodowriteren la classeCardCollectionde 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
CardCollectionquedarà 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
dealque repartirà el número de cartes que s'indique com a paràmetre eliminant-les de la col·lecció. * El mètodeplayjugarà 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
CardCollectioncom una classe abstracta, d'ella hereten dos classesDeckque representa la baralla iHandque 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:
ValidationExceptionserà la classe base i heretaran d'ella les següents subclasses:RequiredValidationExceptionTooLongValidationExceptionInvalidPhoneValidationExceptionInvalidEmailValidationException.InvalidKeyValidationException
FileUploadExceptionserà 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
srccontindrà les classes i view les vistes.
Caldrà crear un repositori privat de Github on mantindrem una versió del projecte.
- Crea la classe
Movieen la carpetasrcdel 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_PATHcontindrà la ruta al directori on es troben les imatges. - Crea un array
$moviesque 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.phpmostrarà les dades de la pel·licula que tinga l'idque s'ha passat pel querystring. Post usararray_filterper trobar l'objecte que té l'id indicat. -
Crea la classe
Useren la carpetasrcamb les següents propietats:- id (integer)
- username (string)
- password (string)
- plan (Plan)
-
Crea la classe
Planen la carpetasrcamb les següents propietats:- id (integer)
- name (enumeration: BASIC, PREMIUM)
- quality (enumeration: SD, HD, 4K)
- screens (integer)