Introdução à Programação Orientada a Objetos em C++ Disciplina de Programação Científica II Aula 12 de 18 24/05/2013 Professor Giovani Gracioli giovanig@gmail.com
Objetivos Os objetivos dessa aula são: Introduzir C++ C melhorado, com mais funcionalidades e orientação a objetos (OO) Apresentar os conceitos de classes e objetos Explicar como criar classes e objetos em C++ Demonstrar como utilizar as classes e objetos criados em C++
Competências Necessárias Para esta aula, vocês precisarão: Entender a linguagem de programação C e noções de programação Conteúdo relacionado às aulas anteriores e computação científica I
Competências a Desenvolver Com essa aula, você aprenderá: Usar E/S em C++ A definir uma classe e usá-la para criar um objeto A definir funções-membro e declarar atributos de uma classe A chamar as funções-membro para realizar uma tarefa A usar construtor de uma classe para inicializar os dados de um objeto quando ele é criado
Conteúdo
C++ (1) C++ aperfeiçoa muitos dos recursos da linguagem em C e oferece recursos de programação orientada a objeto (OOP Object-Oriented-Programming), que aumentam a produtividade, a qualidade e as chances de reutilização do software C++ foi desenvolvida por Bjarne Stroustrup, na Bell Laboratories, e originalmente foi chamada de C com classes. O nome C++ inclui o operador de incremento da linguagem em C (++) para indicar que a linguagem C++ é uma versão melhorada de C
C++ (2) Os nomes de arquivo em C possuem a extensão.c (minúscula) Os nomes de arquivo em C++ podem ter várias extensões, como.cpp,.cxx, ou.cc C++ suporta muitos dos comandos de C Usaremos a extensão.cc while, for, if, switch, do..while, etc.. E os tipos também int, float, double, struct, enum, ponteiros, etc.. Entretanto, o uso de bibliotecas é diferente.. exemplo..
C++: exemplo de E/S
Entrada e Saída (1) A linha 9 usa o objeto de stream de saída-padrão std::cout e o operador de inserção de stream, <<, para exibir a string Digite o primeiro inteiro: " A saída e a entrada em C++ são feitas com streams de caracteres Assim, quando a linha 9 é executada, ela envia o stream de caracteres "Digite o primeiro inteiro: " para std::cout, que normalmente está conectado à tela A linha 10 usa o objeto de stream de entrada-padrão std::cin e o operador de extração de stream, >>, para obter um valor do teclado
Entrada e Saída (2) Saída em cascata std::cout << A soma é " << number1 + number2 << std::endl; OU std::cout << A soma é " << number1 + number2 << \n ;
Biblioteca padrão de C++
Sobrecarga de funções (1) C++ permite a definição de várias funções com o mesmo nome, desde que essas funções tenham diferentes conjuntos de parâmetros (pelo menos em se tratando dos tipos de parâmetro, do número de parâmetros ou da ordem dos parâmetros) Essa capacidade é chamada de sobrecarga de função. Quando uma função sobrecarregada é chamada, o compilador C++ seleciona a função apropriada examinando o número, os tipos e a ordem dos argumentos na chamada A sobrecarga de função normalmente é usada para criar várias funções com o mesmo nome que realizam tarefas semelhantes, mas em dados de diferentes tipos
Sobrecarga de funções (2)
Sobrecarga de funções (3)
Introdução a Classes e Objetos Até agora vimos um pouco do que C++ oferece Entretanto, ainda não vimos os dois principais conceitos que fazem parte de uma linguagem orientada a objetos: Classes e Objetos Normalmente, os programas que você desenvolverá em C++ consistirão na função main e em uma ou mais classes, cada uma contendo dados-membro e funções-membro.
Classes, objetos, funções-membro e dados-membro (1) Analogia simples: suponha que você queira dirigir um carro mais rápido pisando no acelerador Antes de mais nada, o carro precisa ser projetado e construído O pedal oculta os mecanismos complexos que fazem com que o carro acelere, o volante oculta os mecanismos que fazem o carro fazer as curvas Isso permite que pessoas que não conheçam o funcionamento do automóvel o dirijam com facilidade, simplesmente usando os pedais, volante, freio, e outras interfaces simples e amigáveis do carro
Classes, objetos, funções-membro e dados-membro (2) Em C++, classes são utilizadas para abrigar uma função, assim como os desenhos de eng. abrigam o projeto do pedal do acelerador A função que pertence a uma classe é chamada de função-membro ou método Que realizam as tarefas das classes Assim como você não pode dirigir um desenho de eng., também não pode dirigir uma classe É necessário criar um objeto da classe Muitos objetos podem ser criados a partir da mesma classe (assim como muitos carros são construídos do mesmo desenho)
Classes, objetos, funções-membro e dados-membro (3) Ao pisar no pedal do acelerador, uma mensagem é enviada ao sistema que controla a velocidade do carro De modo semelhante, mensagens são enviadas ao objetos (chamada de função-membro) Solicitação de um serviço de um objeto
Classes, objetos, funções-membro e dados-membro (4) Além das funcionalidades que o carro oferece, ele também possui diversos atributos, como cor, portas, km percorridos, etc Esses atributos são representados também no projeto do carro Cada carro mantém seus próprios atributos De modo semelhante, um objeto tem atributos que são carregados com ele enquanto ele existir Esses atributos ou dados-membro são especificados como parte da classe do objeto
Exemplo de criação de classe
Definição de uma classe com uma função-membro (1) Normalmente, você não pode chamar uma função-membro de uma classe até que crie um objeto dessa classe (linha 21 mygradebook) O tipo da variável é GradeBook É um tipo definido pelo usuário A linha 22 chama a função-membro displaymessage usando a variável mygradebook seguida pelo operador ponto (.) Cada classe criada se torna um novo tipo que pode ser usado na criação de objetos Isso faz com que displaymessage realize sua tarefa
Definição de uma função-membro com um parâmetro (2)
Definição de uma função-membro com um parâmetro (3)
Atributos, métodos set e get (1) Variáveis declaradas no corpo das funções são conhecidas como variáveis locais Atributos de um objeto são representados como variáveis em uma definição de classe Precisa ser declarada antes do seu uso, não pode ser acessada fora da função, e são destruídas quando a função termina São declarados dentro de uma definição de classe, mas fora dos corpos das definições dos métodos Métodos manipulam os atributos que pertencem a um objeto Cada objeto mantém sua própria cópia de seus atributos na memória
Atributos, métodos set e get (2)
Atributos, métodos set e get (3)
Inicialização de objetos com construtores (1) Cada classe que você declarar pode fornecer um construtor que poderá ser usado para inicializar um objeto da classe quando o objeto for criado Um construtor é um método especial que deve ser definido com o mesmo nome da classe, para o compilador distingui-lo dos outros métodos Construtores não podem retornar valores (sem tipo de retorno) Normalmente, os construtores são declarados como public
Inicialização de objetos com construtores (2) C++ requer uma chamada ao construtor para cada objeto criado, o que ajuda a garantir que cada objeto seja inicializado antes de ser usado A chamada ocorre implicitamente quando o objeto é criado Se uma classe não incluir explicitamente um construtor, o compilador oferecerá um construtor padrão ou seja, um construtor sem parâmetros
Inicialização de objetos com construtores (3)
Inicialização de objetos com construtores (4)
Finalizando
Revisão Uma classe é formada por um conjunto de funções-membro ou métodos que realizam uma tarefa específica Cada função-membro pode manipular os dadosmembro ou atributos da classe Cada objeto possui os seus atributos próprios Acessados pelos métodos set e get Construtores são chamados para inicializar os objetos antes de serem utilizados
Sugestões Finais Resolvam a lista de exercícios da aula (disponível no ambiente EAD) Só se aprende a programar, programando Dúvidas sobre os exercícios podem ser enviadas por email
Referências Bibliográficas Paul Deitel e Harvey Deitel, C: como programar, 6a edição, Ed. Prentice Hall Brasil, 2011. Paul Deitel e Harvey Deitel, C++: como programar, 5a edição, Ed. Prentice Hall Brasil, 2006. Antonio Filho, Introdução à Programação Orientada a Objetos com C++, 1a edição, Ed. Campus, 2010.