Programação de Computadores Objetivo: Como programar em C++, uma linguagem de programação que suporta Programação Orientada a Objetos Maria da Graça Brasil Rocha Programação de Computadores 1
Introdução! Pq Programação Orientada a Objetos?! Pq não usar outras linguagens tradicionais como C ou Pascal?! Quais são as características da POO?! Conceitos chave: objetos e classes. O que significam?! Quais as relações entre C++ e C? Programação de Computadores 2
Pq POO?! Por conta das limitações impostas por outros paradigmas de programação.! Limitações das linguagens procedimentais, tais como, Pascal, C, Fortran. Nessas linguagens, cada comando diz ao computador para fazer alguma coisa.! Ex: Pegue a entrada, adicione um certo valor, divida por 6 e mostre o resultado => lista de instruções! Programa pequenos-> nenhuma organização! Programas grandes-> quebra em pequenas unidades-> funções e subrotinas -> Uma das bases da Programação Estruturada. Programação de Computadores 3
Problemas com Programação Estruturada! Problemas aparecem quando os programas são grandes e complexos. Ocorre por conta do paradigma e não das pessoas envolvidas.! São dois problemas fundamentais:! Funções tem acesso irrestrito aos dados globais! Funções e dados não relacionados, a base dos paradigma procedimental, fornecem um modelo muito ruim do mundo real! Vamos examinar esses problemas no contexto de um programa gerenciador de estoque. Programação de Computadores 4
! Dado importante : a coleção de itens em estoque! Funções que acessam o dado: entrada de um novo item, mostra um item, modifica um item, etc...! Nas funções e Procedimentos em Pascal existem dois tipos de dados:! locais, que estão dentro do subprograma e são de uso exclusivo do mesmo;! globais (que deve ter sido enfaticamente frisado pelo professor de laboratório de programação que não deveria ser usado) que podem ser acessados e modificados por qq subprograma. Programação de Computadores 5
variáveis globais acessível por qq procedimento ou função acessível somente pela função A variáveis locais acessível somente por B variáveis locais Função A Procedimento B Programação de Computadores 6
Paradigma de programação procedimental Dados Globais Dados Globais Dados Globais Função Função Função Função Um grande número de potenciais conexões entre funções e dados, que pode causar diversos problemas. Programação de Computadores 7
Problemas Gerados! Torna a estrutura do programa difícil de conceituar.! O programa é difícil de ser modificado. Um mudança em um dado global pode obrigar a reescrita de todas as funções que o acessa. Por ex., no nosso programa de estoque, se resolvermos modificar o código de produto, todas as funções que acessam o código devem ser modificadas. Nem sempre é fácil identificar em quais funções esse código está sendo usado, o que pode levar a erros. Lembrem-se do comentado Bug do milênio. Programação de Computadores 8
Modelando o Mundo Real! No mundo real trabalhamos com objetos, tais como pessoas e carros. Esses objetos tem atributos e comportamentos! Atributos ou características:! pessoas-> cor dos olhos, cargo, etc..! carros-> cavalos, quantas portas, etc... Atributos são equivalentes aos dados no programa, eles tem valores específicos, tais como, olhos azuis (pessoas) e quatro( portas ) Programação de Computadores 9
! Comportamento: alguma coisa que um objeto no mundo real faz, em resposta a um estímulo.! Se vc solicitar para os seus pais um aumento de mesada, que resposta obterá? Sim ou NÃOOOO! Se frear um carro, espera-se que ele pare...! Dizer alguma coisa ou parar são exemplos de comportamento.! Comportamento é como uma função, você chama uma função para fazer alguma coisa e ela faz. Programação de Computadores 10
Mais um problema...! Dificuldade de criar novos tipo de dados.! Temos os tipos pré construídos ( built-in ) como: inteiros, reais, caracteres etc. Mas se quisermos por exemplo trabalhar com números complexos, coordenadas bidimensionais ou datas?! Com LOO isso pode facilmente ser construído-> extensibilidade Programação de Computadores 11
A POO! Idéia fundamental das LOO => combinar em uma única unidade, dados e as funções que operam nesses dados! Funções são chamadas Funções membro e fornecem a forma de acessar os dados! Se queremos ler um dado de um objeto=>chamamos uma funções membro que fará essa operação e retornará o valor solicitado.! O dado é escondido => seguro de modificações acidentais. Programação de Computadores 12
! Os dados e suas funções são encapsulados em uma única entidade.! Encapsulamento e esconder dados são os termos chave na descrição da LOO.! Se queremos modificar um dado de um objeto, temos que conhecer exatamente qual das funções executa o que queremos! Um programa em C++ consiste de um número de objetos que se comunicam através da chamada de funções membro. Programação de Computadores 13
Organização de um programa OO objeto dados Função membro Função membro objeto dados objeto dados Função membro Função membro Função membro Função membro Programação de Computadores 14
! Empresa=> pessoas não trabalham um dia vendo problemas de pessoal, no outro na folha de pagamento e depois em vendas => departamentos cada um com suas atribuições e seu próprio pessoal.! Objetos=> departamentos (vendas, pessoal e financeiro) com seus dados próprios. Cada departamento é controlado pelo seu pessoal.! Essa divisão (departamentos) torna mais simples compreender e controlar a empresa, e ajuda a manter a integridade da informação usada na empresa.! Se o gerente de vendas quer saber por exemplo, o total dos salários pagos em uma determinada regional, ele não vai até o departamento financeiro e mexe nos arquivos procurando a informação. Ele manda um memorando (mensagem) ao departamento de pessoal solicitando a informação, espera a pessoa responsável acessar os dados e responder.! Garantia que os dados serão corretamente acessados e não serão estragados por acesso indevido. Programação de Computadores 15
Analogia com uma empresa Depto de Vendas Dados de vendas Gerente de vendas Secretária Depto Pessoal Depto de Finanças Dados dos funcionários Gerente de pessoal Funcionários do setor Dados financeiros Diretor de finanças Assistente financeiro Programação de Computadores 16
Características das LOO! Objetos => Dado um problema, não nos preocupamos mais em como dividir em pedaços e sim em como dividir em objetos! Que espécie de coisas podem ser objetos em um POO?! Limitado pela imaginação do projetista, mas existem algumas categorias típicas para começar a acostumar com essa divisão. Programação de Computadores 17
! Objetos Físicos:! Carros em uma simulação de fluxo de trânsito! Componentes elétricos em um projeto de circuito! Países num modelo econômico! Aviões num sistema de controle aéreo.! Elementos num ambiente de programação! Janelas! Menus! Objetos gráficos (linhas, retângulos, círculos)! Mouse, teclado, discos, impressoras. Programação de Computadores 18
! Construções que armazenam dados! Arranjos! Pilhas! Listas Encadeadas! Árvores Binárias! Entidades Humanas! Empregados! Estudantes! Clientes! Pessoal de Vendas Programação de Computadores 19
! Coleção de dados! Estoque! Arquivo de pessoal! Um dicionário! Tabela de latitude e longitude das cidades no mundo! Dados definidos pelo usuário! Data! Ângulos! Números complexos! Pontos no plano Programação de Computadores 20
! Componentes num jogo! Carros num jogo de corrida! Posições num jogo de tabuleiro (xadrez, dama)! Animais numa simulação ecológica! Adversários e aliados num jogo de aventura! A identificação entre objetos num programa e objetos no mundo real é o resultado da combinação de dados e funções. Programação de Computadores 21
Classes! Em POO dizemos que os objetos são membros de classes. O que isso significa?! Vamos examinar uma analogia. O tipo de dado inteiro é definido em C++ como int. Podemos declarar muitas variáveis como tipo int em um programa. A declaração tem a seguinte forma: int dia, cont, n;! De forma semelhante definimos os objetos de uma mesma classe. A classe é o modelo que especifica quais são os dados e as funções que terão os objetos da classe.! Definir a classe não cria qualquer objeto, assim como a existência do tipo int não cria nenhuma variável. Programação de Computadores 22
! Outra analogia: Prince, Madonna, Sting, Michael Jackson são membros de uma classe de músicos roqueiros.! Não existe nenhuma pessoa chamada músico roqueiro, mas pessoas específicas com nomes específicos são membros da classe roqueiro e, possuem características comuns. Programação de Computadores 23
Herança! Usamos o conceito de classe dividida em subclasses.! Classe animal => subclasses: mamíferos, anfíbios, insetos, pássaros, etc...! Classe veículos => subclasses: carros, caminhões, ônibus e motos.! Princípio de divisão: Cada uma das subclasses compartilham características comuns com a classe da qual elas são derivadas.! Carros, caminhões, ônibus e motos=> todos tem rodas e motor => características de veículos. Além disso, cada subclasse tem suas particularidades. Ônibus: assentos para várias pessoas. Caminhões: espaço para transportar mercadorias... Programação de Computadores 24
Representação gráfica da Herança Classe Base Característica A Característica B Característica Característica A Característica B Característica Característica C Característica Característica A Característica Característica B Característica Característica D Característica Característica E Classes Derivadas Característica Característica A Característica B Característica Característica F Programação de Computadores 25
Reutilização! Classe criada e testada pode ser distribuída para outros usuários para ser usada em seus programas-> similar ao uso de biblioteca de funções em linguagens procedurais! em LOO temos a extensão do conceito de reutilização através da herança, ou seja, sem modificar a classe já existente, adiciona novas características e capacidades. Programação de Computadores 26
Exemplo: "Alguém escreveu uma classe que cria um sistema de menu do tipo do usado no compilador Borland C++ ou Pascal "Precisamos de um sistema de menu que tenha a capacidade de habilitar e desabilitar algumas opções "Criamos uma nova classe que herda todas as capacidades existentes no sistema de menu já desenvolvido e adicionamos a capacidade de habilitar e desabilitar as opções desejadas "Conseqüências: tempo de desenvolvimento menor, maior retorno de investimento e maior segurança Programação de Computadores 27
Criação de novos tipos de dados! LOO dá uma forma conveniente de construção de novos tipos de dados! Exemplo: Sistema que trabalha com coordenadas (x e y)! é possível escrever expressões aritméticas do tipo : posicao1=posicao2 + origem;! posicao1, posicao2 e origem são objetos de uma classe coordenadas que tem como dados duas posições uma representado a coordenada x e outra a coordenada y Programação de Computadores 28
Polimorfismo e Sobrecarga! Sinal de = e operador + usados no exemplo anterior, não operam da mesma forma que por exemplo a soma de dois valores inteiros! Como operam?! A classe coordenadas deve definir novas operações para esses operadores, através de funções membros da classe! Polimorfismo-> uso de operadores ou funções de diferentes maneiras (uma coisa com várias formas distintas).! Sobrecarga-> capacidade dada a um operador para trabalhar com tipos adicionais de dados! Sobrecarga é uma espécie de polimorfismo Programação de Computadores 29
Relação entre C e C++ Linguagem C++ Características usadas para implementar POO Linguagem C Características comuns entre C e C++ O u t r a s caracterísitcas úteis Caracterísitcas não usadas normalmente em C++ Programação de Computadores 30
Objetivos e abordagem que usaremos! Começar a escrever programas em C++ o mais rápido possível! Muitas coisas da linguagem C++ são herdadas da linguagem C.! Toda a estrutura do C++ é orientada a objetos, mas precisamos conhecer aspectos procedimentais de C para escrevermos por exemplo as funções membros das classes.! Vamos inicialmente tratar os aspectos tradicionais da linguagem C++ que também são encontradas na linguagem C => variáveis, E/S, estruturas de decisão e repetição e tipos de dados. Programação de Computadores 31
Resumo! POO é uma forma de organizar programas! A ênfase é no modo como os programas são projetados não nos detalhes do código.! Programas OO são organizados em torno de objetos que contem dados e funções que atuam nos dados! A classe é um modelo para os objetos! Herança permite que uma classe seja derivada de uma já existente. A classe derivada tem todos os dados e funções da classe mãe, mas adiciona seus próprios.! Herança permite que usemos uma mesma classe em vários programas => reutilização. Programação de Computadores 32