Aula Prática 13 Orientação a Objeto Monitoria
Orientação a Objeto O que é? Paradigma de programação que se baseia na premissa de que todos os componentes de um programa podem ser tratados como “objetos” Cada objeto possui determinadas características e comportamentos específicos (atributos e métodos)
Por que usar OO? Orientação à Objeto é mais: Flexível Extensível Reusável Organizada Intuitiva
Objetos Tudo são objetos! Um programa é um conjunto de objetos interagindo e modificando seus estados através de métodos. Ex.: Objeto: DVD Método 1: Play Método 2: Pause Método 3: Voltar Método 4: Avançar
Objetos Métodos são como funções que atuam sobre os atributos de um objeto, modificando-os. Atributos são informações sobre um determinado objeto que mudam de acordo com uma ação executada (método). Avançar(10 s) 1:10:321:10:42 Tempo sendo modificado
C++ Objetivo: ○ Combinar o desempenho de C com as facilidades de linguagens de alto nível. ○ Oferecer uma melhor organização no desenvolvimento de projetos complexos. ○ Combinar paradigmas de programação para aumentar a liberdade do desenvolvedor. Ou seja: ○ Em grosso modo, C++ possui o desempenho de C (imperativa) combinado com as facilidades de JAVA (orientada a objeto)
Classes Uma classe representa um tipo de objeto Agrupa objetos com características em comum Assim como C possui structs, C++ possui classes
Classes As classes possuem: Atributos Métodos Que podem ser: Privados (Só são acessados por métodos da classe) Públicos (Podem ser manipulados diretamente)
Classes Em C++ os métodos são definidos na classe, porém são efetivamente implementados fora dela: No caso do método “Conta” (que é um construtor), não seria necessário definí-lo ou implementá-lo. C++ por padrão cria um construtor sem parâmetros. MAS O QUE É UM CONSTRUTOR?? O apontador this utilizado nesse construtor simplesmente guarda uma referência para o objeto que está sendo criado. Seu uso só é necessário quando existe uma variável local com o mesmo nome de um atributo da classe.
Construtor É um método especial que toda classe possui. Pode ser utilizado para criar um objeto de duas formas: Dinamicamente: É utilizado junto com o comando new na hora de criar um novo objeto pertencente à classe. Ex.:
Construtor Estaticamente: Note que, assim como uma estrutura utiliza o operador -> para estruturas criadas dinamicamente e o operador. para as estáticas, o mesmo acontece com os objetos.
Encapsulamento É uma técnica de programação que fornece uma maior robustez ao código que está sendo criado. Basicamente “protege” os atributos de modificações indesejadas. Funciona da seguinte forma: Atributos encapsulados são do tipo private São criados métodos para que eles possam ser acessados e modificados com segurança. Ex.: Não é possível remover uma quantia maior que o saldo. Como há encapsulamento, caso o saldo não seja suficiente para o saque, ele parmanece inalterado.
Streams Em C++, a entrada e saída de dados é efetuada através da biblioteca iostream Um “stream” representa um dispositivo de entrada ou saída, tal como o teclado e o console
Entrada Padrão Entrada padrão: cin A leitura é feita utilizando o operator shift right Exemplo: int a; cin >> a; Pode-se ler vários items de uma só vez Exemplo: int, a,b,c; cin >> a >> b >> c;
Entrada Padrão Saída padrão: cout A leitura é feita utilizando o operator shift left Exemplo: int a; cout << a; O comando endl pode ser usado para imprimir um \n Analogamente ao cin, pode-se imprimir vários items de uma só vez int, a,b,c; cout << “Numeros: “ << endl << a << “ “ << b << “ “ << c;
Dúvidas??
Exercício Crie uma classe para representar um inteiro, esta classe deve ser capaz de realizar as seguintes operações: 1) Atribuição de Adição (+=) 2) Atribuição de Subtração (-=) 3) Pre-Incremento (++?) O seguinte trecho de código deve funcionar corretamente: Inteiro a(10); Inteiro b; b.somar(a); b.somar(a.incrementar()); cout << "A: " << a.getValor() << endl; // Saída 11 cout << "B: " << b.getValor() << endl; // Saída 21
Exercício Crie uma classe em C++ que simule um serviço de agenda. Para isso você deve criar uma classe “Agenda” e uma classe “Compromisso”. A classe “Agenda” deve possuir os seguintes dados: -Nome do dono -Número telefônico - -Compromissos Você deve utilizar encapsulamento para criar métodos usados na modificação dos atributos. Além disso, a classe “Compromisso” deve possuir os atributos a seguir: -Data do compromisso -Informações sobre o compromisso Ao final, receba do usuário duas agendas com cada uma dois compromissos.