Programação Avançada Orientação a objetos

60
Programação Avançada Orientação a objetos Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012

description

Programação Avançada Orientação a objetos. Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012. Introdução. Forma de programar Programação não estruturada Programas simples e pequenos Ex: Cartões Programação Estruturada (ou Modular) - PowerPoint PPT Presentation

Transcript of Programação Avançada Orientação a objetos

Programao Avanada

Programao AvanadaOrientao a objetosProf. Natalia Castro FernandesMestrado em Telecomunicaes UFF2 semestre/2012IntroduoForma de programar

Programao no estruturadaProgramas simples e pequenosEx: Cartes

Programao Estruturada (ou Modular)Programas divididos em mdulos Mdulos com estruturas de dados internasIntroduoProgramao Orientada Objetos

Programas estruturados pelos dados e no pelas operaesDados, chamados de classe, especificam as operaes vlidasMdulos agrupados por dados e suas representaes

Unifica as ideias de algoritmos e estruturas de dados atravs do conceito de Objeto

Programas organizados pelo comportamento dos objetos e no como uma simples sequncia de comando e chamadas desconectadas.Classe a representao de um tipo abstrato de dadosEspecifica:AtributosMtodos (funes)Define as propriedades e o comportamento dos conjuntos de objetos.Objeto uma instncia de uma classeIdentificado univocamente pelo seu nomePossui estado, determinado pelo valor dos atributos ao longo do tempoEstado modificado pela aplicao dos mtodosMudana de estados define comportamento do objetoConceitos de Orientao a Objetos AbstraoEncapsulamentoHierarquia de classes e heranaPolimorfismo Construtores e destrutoresAbstraoObjeto pode ser utilizado conhecendo-se apenas a sua interfaceDetalhes de implementao so ignoradosEncapsulamento de dados e algoritmosDefinidos dentro do objeto, no havendo necessidade de serem expostos na interface do objetoEncapsulamentoForma de definio dos objetosClassificao de atributos e mtodos de acordo com o controle de acessoClasse composta de vrias seesPrivada Podem ser acessados apenas pelos mtodos do objetoPblica Podem ser acessados por outros objetosProtegida Podem ser acessados por mtodos definidos na classe ou nas classes derivadasEm Python, tudo pblico, mas existem meios para usar o privado.Veja mais em: http://docs.python.org/tutorial/classes.htmlHierarquia de Classes e heranaPode-se desenvolver uma hierarquia de classeCriao de uma classe-raiz e diversas subclasses ou classes derivadasAs classes-raiz representam as tarefas mais generalizadas As subclasses representam tarefas mais especficasHerdam as caractersticas das classes ascendentesVantagem: Reaproveitamento de cdigo!HeranaHerana simplesUma classe tem apenas um pai

Herana mltiplaUma classe tem vrios paisPolimorfismoUma mesma funo pode ser definida de forma diferente por uma famlia de classesComportamento definido pela definio do mtodo em cada classeExemplosListas, tuplas e strings podem ser indexadas por um nmero entre colchetes e suportam o mtodo lenSe usarmos len(x), podemos passar uma lista, uma tupla ou uma string sem modificaes ou indicaes no cdigoRedefinio de mtodos de uma classe paiA classe enlace pode ter um mtodo trata_erro genricoEsse mtodo pode ser tratado de forma mais especifica dentro das classes filhas, que redefinem a funoConstrutores e destrutoresSo mtodos especiais das classesO construtor ativado quando se instancia o objeto de uma classeFaz as atribuies iniciais da classeTem o nome da classeO destrutor da classe ativado quando termina o escopo de um objetoFaz as aes finais antes de o objeto ser eliminadoQuando no so declarados, o construtor apenas cria a rea de memria necessria ao objeto e o destrutor a liberaOrientao a objetos em PythonClasseFbrica de objetosA rigor, em Python, uma classe tambm um objetoUso de mdulo.mtodo uma forma de usar um mdulo como um objeto. O mesmo se aplica s classesDefinio de uma classeclass nome:var = valor...var = valordef metodo (self, ... arg):...def metodo (self, ... arg):...

Definio de classesNa definio dos mtodos, os atributos so chamados como nome_da_classe.atributo

O primeiro argumento de qualquer mtodo sempre selfO self uma referncia a prpria instncia da classe uma forma de a classe dizer que se refere a si mesmaAtributos da classe podem ser chamados tambm como self.atributo

Um objeto de uma classe criado usando nome_da_classe()Exemplos Criao de classes

Exemplos Criao de classes

Exemplos (o que no fazer)

Exemplos Uso do self

Exemplos Atributos internos e externos

Exemplos - Reescrevendo

Ateno: o.extra() daria erro. Por que?ExerccioImagine que voc est programando um site que deve vender pizza. A loja, o vendedor, o cliente, a pizza e o cardpio precisam ser representados. Crie as classes, com seus mtodos (apenas imprimem o que deveriam fazer, mas recebem os argumentos corretos) e atributos.Construtores em PythonChamados automaticamente na criao de instnciasUtilizados declarando-se um mtodo __init__Exemplo

Exemplo

DestrutoresA linguagem Python j apresenta um coletor de lixo Gerenciamento de memria alocada feita de forma automticaUso dos destrutores para:Fechar socketsFechar conexes com banco de dadosFechar arquivosEtc;Formato:__del__Destrutores so chamados aps o fim do escopo no qual o objeto est inserido

Ateno: As mensagens do destrutor podem no aparecer no console que voc est usando.(mensagens impressas apenas no sys.stderr)Se houver necessidade de criar logs, usar arquivos e colocar exit no final do cdigo.ExerccioCrie uma classe para lidar com strings que tenha um construtor e um destrutor. A classe pode ter tantos argumentos voc achar necessrio, mas deve ter pelo menos um mtodo.EncapsulamentoAtributos pblicosTodos os atributos de uma classe, por padro

Atributos privadosRepresentados com __ na frente do nomeExemplos

Exemplos

ExerccioDois objetos de classes distintas, A e B, interagem da seguinte forma. Enquanto A no recebe um nmero primo do usurio, ele fica recebendo novos nmeros. Quando recebe um nmero primo, ele ativa um atributo privado de B, de tal forma que B passa a pedir nmeros para o usurio at receber um nmero no primo. Quando nmero recebido, B seta um atributo privado de A, de tal forma que A volta para a operao inicial.Ateno: Utilize threads para representar o funcionamento das duas classes.Herana e PolimorfismoPara uma classe herdar atributos e mtodos de outra, basta declarar isso na definio da classeFormato: Class Filha(Classe_Pai):Filha uma sub-classe ou uma derivada de Classe_Pai e Classe_Pai uma superclasse ou base de C

possvel adicionar novos mtodos e atributos classe Filha, assim como possvel modificar mtodos da Classe_Pai.Herana e PolimorfismoCaso um mtodo ou um atributo seja redefinido e seja necessrio chamar esse mtodo ou atributo da superclasse, colocar essa chamada de forma explicita

Construtores e destrutores da classe e da superclasse precisam ser chamados pelo construtor da nova classe

Declarao de heranaDeclarao de novos atributosAtributo definido na classe paiRedefinio de mtodoUso da funo pela definio do pai e do filho

Redefinio de atributoUso de atributo do pai e do filho

Descomentando a linha pai.__init__(self)Construtores e heranaO construtor da classe pai apenas atua sobre os atributos da classe filhaOs atributos do pai chamados como pai.atributo no sero impactados pelo construtor do paiCuidado ao sobrescrever indevidamente atributos

Classes sem heranaClasses que no herdam de outra classe do usurio podem ser definidas da seguinte forma:class sem_pai(object):

Isso permite algumas propriedades especiais para a classe que no sero discutidas agoraMais informaes em: http://docs.python.org/release/2.2.3/whatsnew/sect-rellinks.html

Herana de mltiplas classesUma classe pode ter vrios paisHerda os atributos e mtodos de todas as classes paisSe duas classes pais possurem o mesmo mtodo ou o mesmo atributo, vale o atributo da classe declarada primeiro

ExerccioCrie um conjunto de classes, utilizando o conceito de herana, para representar as pessoas que interagem entre si em uma empresa.Mdulo operadorPermite reescrever o uso de comparaes de objetos, operaes lgicas e matemticas, operaes de sequncia e testes de tipo abstrato

Com isso, possvel reescrever o que deve ser feito quando se deseja somar ou subtrair dois objetos, por exemplo

Mdulo operadorPrincipais funesoperator.lt(a,b) ou operator.__lt__(a,b)operator.le(a,b) ou operator.__le__(a,b)operator.eq(a,b) ou operator.__eq__(a,b)operator.ne(a,b) ou operator.__ne__(a,b)operator.ge(a,b) ou operator.__ge__(a,b)operator.gt(a,b) ou operator.__gt__(a,b)Mdulo operadorPrincipais funesoperator.is_(a,b) = Returnaisboperator.abs(obj)operator.__abs__(obj) operator.add(a,b)operator.__add__(a,b) operator.and_(a,b)operator.__and__(a,b) operator.div(a,b)operator.__div__(a,b)operator.mod(a,b)operator.__mod__(a,b)Mdulo operadorPrincipais funesoperator.neg(obj)operator.__neg__(obj)operator.or_(a,b)operator.__or__(a,b) operator.pos(obj)operator.__pos__(obj)operator.pow(a,b)operator.__pow__(a,b)operator.concat(a,b)operator.__concat__(a,b) operator.contains(a,b)operator.__contains__(a,b)Mdulo operadoroperator.iadd(a,b)operator.__iadd__(a,b)a=iadd(a,b)a+=b.operator.iand(a,b)operator.__iand__(a,b)a&=b.operator.iconcat(a,b)operator.__iconcat__(a,b)a+=bforaandbsequences.operator.idiv(a,b)operator.__idiv__(a,b)a/=bMdulo operadoroperator.imod(a,b)operator.__imod__(a,b)a%=b.operator.imul(a,b)operator.__imul__(a,b)a*=b.operator.ior(a,b)operator.__ior__(a,b)a|=b.operator.ipow(a,b)operator.__ipow__(a,b)a**=b.

Mdulo operadorMais informaes em: http://docs.python.org/library/operator.htmlExerccioCrie uma classe matriz que, com seu construtor, cria uma matriz m x n. Essa classe deve sobrescrever os mtodos para adio, subtrao, multiplicao e diviso, de tal forma que as operaes sejam realizadas nas matrizes de forma adequada.Outras redefinies...__len__Retorna o comprimento da sequenciaChamada: len(objeto)__del__Chamada por del objeto[key]Apenas para (algumas) sequencias mutveis

ExercciosModifique a classe de matrizes criada no exerccio anterior, adicionando um novo mtodo. Esse novo mtodo verifica se dentro da matriz atual existem todas as vogais. Adicione mais um mtodo que verifica se a soma de todos os inteiros presentes na matriz um nmero regular. Um nmero dito regular se sua decomposio em fatores primos apresenta apenas potncias de 2, 3 e 5. Faa uma funo que verique se um nmero ou no regular.ExercciosDesenvolva, com orientao a objetos, um programa que implemente o jogo da velha usando uma matriz de inteiros (use o 0 para o O e o 1 para o X). O programa deve permitir o jogo entre dois jogadores. A cada jogada o programa deve exibir a configurao atual do jogo ( matriz). Faa um algoritmo da soluo, que deve ser executado no fim de cada jogada. Faa tambm o mtodo que recebe a posio da jogada e diz qual o jogador atual.Crie uma classe para lidar com nmeros. Essa classe, entre os seus mtodos, deve apresentar:Um mtodo que diz se um nmero um capicua. Um nmero capicua quando ele no muda se lido da esquerda para a direita ou da direita para a esquerda. Se o nmero for capicua, o mtodo deve modificar o seu valor, somando 1.Um mtodo que converta um nmero da base 10 para qualquer base entre 2 e 9, inclusive.ExercciosCrie uma classe para lidar com grafos. Um grafo G = (V;A) consiste em:um conjunto nito de vrtices, V. um conjunto nito de arestas ligando dois vrtices, A. A sua classe deve ter:um mtodo para representar o grafo como uma lista de adjacncias;um outro mtodo para representar o grafo como uma matriz de adjacncias;um mtodo para determinar se dois vrtices so vizinhos;Um mtodo para determinar a lista de todos os vrtices que so vizinhos de um dado vrticeUm mtodo para dizer a menor distncia entre dois vrtices quaisquer do grafo. Considere que cada vrtice representado por um nmero inteiro. Escreva um aplicativo para testar a classe.