Menu
Coddy logo textTech

Classes de Livros e Usuários

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy. Lição 83 de 91.

challenge icon

Desafio

Fácil

Vamos construir a base do nosso Sistema de Gerenciamento de Biblioteca criando as classes Book e User. Esses objetos de domínio fundamentais trabalharão juntos para gerenciar as operações da biblioteca.

Você organizará seu código em três arquivos:

  • Book.php: crie uma classe Book que acompanhe os livros da biblioteca. Seu livro deve ter três propriedades readonly definidas por promoção de construtor: isbn, title e author. Inclua uma propriedade privada $isAvailable que comece como true. Adicione três métodos:
    • isAvailable(): bool: retorna o status de disponibilidade
    • markAsBorrowed(): void: define a disponibilidade como false
    • markAsReturned(): void: define a disponibilidade como true
  • User.php: inclua o arquivo Book e crie uma classe User que represente os membros da biblioteca. Seu usuário deve ter duas propriedades readonly por meio da promoção de construtor: id (int) e name (string). Inclua um array privado $borrowedBooks (inicialmente vazio) e uma constante MAX_BOOKS definida como 3. Adicione estes métodos:
    • getBorrowedBooks(): array: retorna o array de livros emprestados
    • canBorrow(): bool: retorna true se o usuário tiver menos de MAX_BOOKS livros emprestados
    • addBook(Book $book): void: adiciona um livro ao array de livros emprestados
    • removeBook(string $isbn): void: remove um livro pelo ISBN usando array_filter
  • main.php: inclua o arquivo User e coloque suas classes em ação. Você receberá quatro entradas: um ID de usuário, o nome do usuário, o ISBN do livro e o título do livro (o autor será "Unknown").

    Crie um User e um Book com os valores fornecidos. Imprima se o usuário pode pegar um livro emprestado inicialmente; em seguida, faça com que o usuário pegue o livro emprestado (marque-o como emprestado e adicione-o ao usuário). Por fim, imprima a disponibilidade do livro e a quantidade de livros emprestados.

    Formato da saída:

    Can borrow: [yes/no]
    Book available: [yes/no]
    Books borrowed: [count]

Observe como o encapsulamento protege o estado interno: a disponibilidade de um livro só muda por meio de métodos dedicados, e os livros emprestados por um usuário são gerenciados por meio de acesso controlado. Essa base dará suporte ao sistema de empréstimos que construiremos em seguida.

Experimente você mesmo

<?php

require_once 'User.php';

// Ler entradas
$userId = intval(trim(fgets(STDIN)));
$userName = trim(fgets(STDIN));
$bookIsbn = trim(fgets(STDIN));
$bookTitle = trim(fgets(STDIN));
$bookAuthor = "Unknown";

// TODO: Crie um objeto User com o id e o name fornecidos

// TODO: Crie um objeto Book com o isbn, title e author fornecidos

// TODO: Imprima se o usuário pode pegar emprestado inicialmente
// Format: "Can borrow: yes" or "Can borrow: no"

// TODO: Faça o usuário pegar o livro emprestado:
// - Marque o livro como emprestado
// - Adicione o livro aos livros emprestados do usuário

// TODO: Imprima a disponibilidade do livro
// Format: "Book available: yes" or "Book available: no"

// TODO: Imprima a contagem de livros emprestados
// Format: "Books borrowed: [count]"

?>

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de PHP online