Linguagem de Programação C++

Universidade Federal de Santa Catarina

Departamento de Engenharia Elétrica, CTC

Prof. Eduardo Augusto Bezerra


Exercício - Herança Múltipla e Agregação


Desenvolver um módulo de um sistema de controle de acesso utilizando o mecanismo de herança mútipla do C++. A seguir são listados alguns requisitos e considerações:

  1. A figura a seguir apresenta quatro classes para utilização no sistema.

  2. A classe Pessoa é utilizada para representar os usuários do sistema de controle de acesso, ou seja, as "pessoas" que irão "acessar" o recinto que estará sendo controlado.

  3. As classes Barras, Smart Card e RFID, representam as tecnologias de equipamentos a serem utilizadas no sistema.

  4. Na figura estão listados apenas os atributos de cada classe, mas no sistema deverão ser implementados também os respectivos métodos para as classes Pessoa, Barras, Smart Card e RFID.

  5. Avaliar duas possibilidades de modelagem para o problema: herança (múltipla); e agregação. No caso da "agregação", identificar as possibilidades de uso do conceito "faz parte de". No caso da utilização do conceito de "herança múltipla", a classe a ser criada pelo projetista deverá herdar obrigatoriamente a classe Pessoa e, pelo menos, uma das três classes que representam as tecnologias de identificação disponíveis no sistema. Assim, se o projetista estiver desenvolvendo um sistema de controle de acesso para um ambiente onde existe disponível apenas leitoras de códigos de barras e, obviamente, todos os usuários possuem apenas cartões com códigos de barras, nesse caso a classe derivada (a ser criada) deverá herdar a classe Pessoa e a classe Barras, conforme representado na figura a seguir.

  6. PARTE I - a ser desenvolvido em aula. O objetivo principal do exercício a ser realizado em aula é o entendimento dos conceitos, e a implementação de agregação e herança múltipla em C++. As classes do exercício a ser realizado em aula não precisam incluir as rotinas de acesso aos equipamentos. Podem ser utilizados métodos dummy nas respectivas classes, que poderão responder suas requisições com mensagens de texto do tipo "Conectado!" e "Matricula lida: ...". Utilizar um vetor para armazenar o cadastro de usuários (Pessoas) com permissão de acesso. Sempre que uma nova matrícula for lida do equipamento selecionado, deverá ser realizada uma consulta no vetor, e informado se o usuário possui acesso ou não.

  7. PARTE II - tarefa extra-classe. Um outro objetivo importante do exercício é o entendimento da interface com os equipamentos mencionados. Para consolidar esse entendimento, como tarefa extra-classe é solicitada a implementação dessas rotinas, e inclusão no sistema desenvolvido em aula (no lugar dos métodos dummy).

  8. Para implementação das rotinas de "Conexão", "Leitura" e "Gravação" dos equipamentos, será necessário:
    • Definir o tipo de interface e verificar a disponibilidade no computador hospedeiro (serial, USB, PS-2, I2C, ...);
    • Definir o fabricante/modelo do equipamento;
    • A escolha do modelo precisa considerar, entre outros: tipo de interface (serial, USB, PS-2, I2C, ...), software disponível, ...

  9. Em sistemas embarcados em geral, principalmente aqueles desenvolvidos para aplicações industriais, os equipamentos utilizados ainda utilizam interfaces seriais do tipo RS-232C (e RS-485). Como ponto de partida para a implementação das rotinas de "Conexão", "Leitura" e "Gravação" utilizando a interface RS-232C no Linux, considerar o programa em C: serial_linux.c

  10. A interface USB está cada vez mais presente nas soluções industriais e comerciais. Normalmente, os fabricantes de equipamentos com interface USB fornecem uma API utilizada pelos desenvolvedores para acesso aos seus equipamentos. Por exemplo, ao ser lançado um novo "finger print reader" no mercado, o fabricante disponibiliza também um EDK (Embedded Development Kit) com rotinas para os desenvolvedores incluirem em seus projetos.

  11. Exemplo de código em C para acesso a dispositivos USB: usb.c.

  12. Tutoriais para uso de USB em C/C++ no Linux: http://www.linux-usb.org/ e http://www.lrr.in.tum.de/Par/arch/usb/usbdoc/

  13. Para auxiliar no entendimento das implementações USB: Notas de aula USB.

  14. Exemplos dos equipamentos representados nas classes Barras, Smart Card e RFID são apresentados na figura a seguir.