Transcript
Page 1: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Prof. Natalia Castro Fernandes

Mestrado em Telecomunicações – UFF

2º semestre/2012

Page 2: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · 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� Programas simples e pequenos

� Ex: Cartões

� Programação Estruturada (ou Modular)� Programas divididos em módulos

� Módulos com estruturas de dados internas

Page 3: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Introdução

� Programação Orientada à Objetos

� Programas estruturados pelos dados e não pelas operações

� Dados, chamados de classe, especificam as operações válidas

� Módulos agrupados por dados e suas representações

� Unifica as ideias de algoritmos e estruturas de dados através do conceito de Objeto

Programas organizados pelo comportamento dos objetos e não como uma simples sequência de comando e chamadas desconectadas.

Page 4: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Classe� É a representação de um tipo abstrato de dados

� Especifica:� Atributos

� Métodos (funções)� Métodos (funções)

� Define as propriedades e o comportamento dos conjuntos de objetos.

Page 5: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Objeto� É uma instância de uma classe

� Identificado univocamente pelo seu nome

� Possui estado, determinado pelo valor dos atributos ao longo do tempolongo do tempo

� Estado modificado pela aplicação dos métodos� Mudança de estados define comportamento do objeto

Page 6: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Conceitos de Orientação a Objetos � Abstração

� Encapsulamento

� Hierarquia de classes e herança

Polimorfismo � Polimorfismo

� Construtores e destrutores

Page 7: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Abstração

� Objeto pode ser utilizado conhecendo-se apenas a sua interfaceinterface� Detalhes de implementação são ignorados

� Encapsulamento de dados e algoritmos� Definidos dentro do objeto, não havendo necessidade de

serem expostos na interface do objeto

Page 8: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Encapsulamento� Forma de definição dos objetos

� Classificação de atributos e métodos de acordo com o controle de acesso

� Classe composta de várias seções� Classe composta de várias seções� Privada – Podem ser acessados apenas pelos métodos do

objeto

� Pública – Podem ser acessados por outros objetos

� Protegida – Podem ser acessados por métodos definidos na classe ou nas classes derivadas

Em Python, tudo é público, mas existem meios para usar o privado.Veja mais em: http://docs.python.org/tutorial/classes.html

Page 9: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Hierarquia de Classes e herança� Pode-se desenvolver uma hierarquia de classe

� Criação de uma classe-raiz e diversas subclasses ou classes derivadas

� As classes-raiz representam as tarefas mais � As classes-raiz representam as tarefas mais generalizadas

� As subclasses representam tarefas mais específicas� Herdam as características das classes ascendentes

Vantagem: Reaproveitamento de código!

Page 10: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Herança� Herança simples

� Uma classe tem apenas um paiEnlace

� Herança múltipla� Uma classe tem vários pais

Sem fio Ethernet Óptico

Page 11: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Polimorfismo� Uma mesma função pode ser definida de forma diferente

por uma família de classes� Comportamento definido pela definição do método em cada

classe

� Exemplos� Exemplos� Listas, tuplas e strings podem ser indexadas por um número

entre colchetes e suportam o método len� Se usarmos len(x), podemos passar uma lista, uma tupla ou uma

string sem modificações ou indicações no código

� Redefinição de métodos de uma classe pai� A classe enlace pode ter um método trata_erro genérico

� Esse método pode ser tratado de forma mais especifica dentro das classes filhas, que redefinem a função

Page 12: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Construtores e destrutores� São métodos especiais das classes

� O construtor é ativado quando se instancia o objeto de uma classe� Faz as atribuições iniciais da classe� Tem o nome da classe

� O destrutor da classe é ativado quando termina o escopo de um objeto� Faz as ações finais antes de o objeto ser eliminado

� Quando não são declarados, o construtor apenas cria a área de memória necessária ao objeto e o destrutor a libera

Page 13: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Orientação a objetos em Python� Classe

� “Fábrica” de objetos� A rigor, em Python, uma classe também é um objeto

� Uso de módulo.método é uma forma de usar um módulo como um objeto. O mesmo se aplica às classes

� Definição de uma classe� Definição de uma classeclass nome:

var = valor...var = valordef metodo (self, ... arg):...def metodo (self, ... arg):...

Page 14: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Definição de classes� Na definição dos métodos, os atributos são chamados como

nome_da_classe.atributo

� O primeiro argumento de qualquer método é sempre self� O primeiro argumento de qualquer método é sempre self

� O self é uma referência a própria instância da classe� É uma forma de a classe dizer que se refere a si mesma

� Atributos da classe podem ser chamados também como self.atributo

� Um objeto de uma classe é criado usando nome_da_classe()

Page 15: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exemplos – Criação de classes

Page 16: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exemplos – Criação de classes

Page 17: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exemplos (o que não fazer)

Page 18: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exemplos – Uso do self

Page 19: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exemplos – Atributos internos e

externos

Page 20: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exemplos - Reescrevendo

Atenção: o.extra() daria erro. Por que?

Page 21: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exercício� Imagine que você está programando um site que deve

vender pizza. A loja, o vendedor, o cliente, a pizza e o cardápio precisam ser representados. Crie as classes, com seus métodos (apenas imprimem o que deveriam com seus métodos (apenas imprimem o que deveriam fazer, mas recebem os argumentos corretos) e atributos.

Page 22: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Construtores em Python

� Chamados automaticamente na criação de instâncias

� Utilizados declarando-se um método __init__

Page 23: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exemplo

Page 24: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exemplo

Page 25: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Destrutores� A linguagem Python já apresenta um ‘coletor de lixo’

� Gerenciamento de memória alocada feita de forma automática

� Uso dos destrutores para:� Fechar sockets� Fechar sockets� Fechar conexões com banco de dados� Fechar arquivos� Etc;

� Formato:� __del__

� Destrutores são chamados após o fim do escopo no qual o objeto está inserido

Page 26: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Atenção: As mensagens do destrutor podem não 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 código.

Page 27: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exercício� Crie uma classe para lidar com strings que tenha um

construtor e um destrutor. A classe pode ter tantos argumentos você achar necessário, mas deve ter pelo menos um método.menos um método.

Page 28: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Encapsulamento� Atributos públicos

� Todos os atributos de uma classe, por padrão

� Atributos privados� Atributos privados� Representados com __ na frente do nome

Page 29: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exemplos

Page 30: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exemplos

Page 31: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exercício� Dois objetos de classes distintas, A e B, interagem da

seguinte forma. Enquanto A não recebe um número primo do usuário, ele fica recebendo novos números. Quando recebe um número primo, ele ativa um atributo privado de B, de tal forma que B passa a pedir atributo privado de B, de tal forma que B passa a pedir números para o usuário até receber um número não primo. Quando número é recebido, B seta um atributo privado de A, de tal forma que A volta para a operação inicial.� Atenção: Utilize threads para representar o

funcionamento das duas classes.

Page 32: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Herança e Polimorfismo� Para uma classe herdar atributos e métodos de outra,

basta declarar isso na definição da classe� Formato: Class Filha(Classe_Pai):

� Filha é uma sub-classe ou uma derivada de Classe_Pai e � Filha é uma sub-classe ou uma derivada de Classe_Pai e Classe_Pai é uma superclasse ou base de C

� É possível adicionar novos métodos e atributos à classe Filha, assim como é possível modificar métodos da Classe_Pai.

Page 33: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Herança e Polimorfismo� Caso um método ou um atributo seja redefinido e seja

necessário chamar esse método 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

Page 34: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Declaração de herança

Declaração de Declaração de novos atributos

Atributo definido na classe pai

Redefinição de método

Uso da função pela definição do pai e do filho

Page 35: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012
Page 36: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Redefinição de Redefinição de atributo

Uso de atributo do pai e do filho

Page 37: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Descomentando a linha pai.__init__(self)

Page 38: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Construtores e herança� O construtor da classe pai apenas atua sobre os

atributos da classe filha� Os atributos do pai chamados como pai.atributo não

serão impactados pelo construtor do paiserão impactados pelo construtor do pai� Cuidado ao sobrescrever indevidamente atributos

Page 39: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012
Page 40: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Classes sem herança� Classes que não herdam de outra classe do usuário

podem ser definidas da seguinte forma:� class sem_pai(object):

� Isso permite algumas propriedades especiais para a classe que não serão discutidas agora� Mais informações em:

http://docs.python.org/release/2.2.3/whatsnew/sect-rellinks.html

Page 41: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012
Page 42: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Herança de múltiplas classes

� Uma classe pode ter vários pais� Herda os atributos e métodos de todas as classes pais

Se duas classes pais possuírem o mesmo método ou o mesmo � Se duas classes pais possuírem o mesmo método ou o mesmo atributo, vale o atributo da classe declarada primeiro

Page 43: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012
Page 44: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exercício� Crie um conjunto de classes, utilizando o conceito de

herança, para representar as pessoas que interagem entre si em uma empresa.

Page 45: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Módulo operador

� Permite reescrever o uso de comparações de objetos, operações lógicas e matemáticas, operações de sequência e testes de tipo abstratosequência e testes de tipo abstrato

� Com isso, é possível reescrever o que deve ser feito quando se deseja somar ou subtrair dois objetos, por exemplo

Page 46: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012
Page 47: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Módulo operador� Principais funções

� operator.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.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)

Page 48: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Módulo operador� Principais funções

� operator.is_(a, b) = Return a is b� operator.abs(obj)

� operator.__abs__(obj)

operator.add(a, b)� 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)

Page 49: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Módulo operador� Principais funções

� operator.neg(obj)� operator.__neg__(obj)

� operator.or_(a, b)� 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)

Page 50: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Módulo operador� operator.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 += b for a and b sequences.

� operator.idiv(a, b)� operator.__idiv__(a, b)

� a /= b

Page 51: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Módulo operador� operator.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.

Page 52: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012
Page 53: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012
Page 54: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Módulo operador� Mais informações em:

http://docs.python.org/library/operator.html

Page 55: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exercício� Crie uma classe matriz que, com seu construtor, cria

uma matriz m x n. Essa classe deve sobrescrever os métodos para adição, subtração, multiplicação e divisão, de tal forma que as operações sejam realizadas divisão, de tal forma que as operações sejam realizadas nas matrizes de forma adequada.

Page 56: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Outras redefinições...� __len__

� Retorna o comprimento da sequencia

� Chamada: len(objeto)

� __del__� __del__� Chamada por del objeto[key]

� Apenas para (algumas) sequencias mutáveis

Page 57: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012
Page 58: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exercícios� Modifique a classe de matrizes criada no exercício

anterior, adicionando um novo método. Esse novo método verifica se dentro da matriz atual existem todas as vogais. todas as vogais.

� Adicione mais um método que verifica se a soma de todos os inteiros presentes na matriz é um número regular. Um número é dito regular se sua decomposição em fatores primos apresenta apenas potências de 2, 3 e 5. Faça uma função que verifique se um número é ou não regular.

Page 59: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exercícios� Desenvolva, com orientação 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 configuração atual do jogo ( matriz). Faça um algoritmo da solução, que deve ser executado no fim de cada jogada. Faça também o método que recebe a posição da jogada e diz qual o jogador atual.jogada. Faça também o método que recebe a posição da jogada e diz qual o jogador atual.

� Crie uma classe para lidar com números. Essa classe, entre os seus métodos, deve apresentar:� Um método que diz se um número é um capicua. Um número é capicua

quando ele não muda se lido da esquerda para a direita ou da direita para a esquerda. Se o número for capicua, o método deve modificar o seu valor, somando 1.

� Um método que converta um número da base 10 para qualquer base entre 2 e 9, inclusive.

Page 60: Prof. Natalia Castro Fernandes Mestrado em ...natalia/prog_avan/slide6.pdf · Prof. Natalia Castro Fernandes Mestrado em Telecomunicações –UFF 2º semestre/2012

Exercícios� Crie uma classe para lidar com grafos. Um grafo G = (V;A)

consiste em:� um conjunto finito de vértices, V. � um conjunto finito de arestas ligando dois vértices, A. A sua classe deve ter:A sua classe deve ter:

� um método para representar o grafo como uma lista de adjacências;� um outro método para representar o grafo como uma matriz de

adjacências;� um método para determinar se dois vértices são vizinhos;� Um método para determinar a lista de todos os vértices que são vizinhos

de um dado vértice� Um método para dizer a menor distância entre dois vértices quaisquer

do grafo. Considere que cada vértice é representado por um número inteiro.

Escreva um aplicativo para testar a classe.


Recommended