장음표시 사용
141쪽
Aprono a Computaςao com Python Documentation, is rSBO q. 434 Capitulo et T. Capitulo 45: Conjuntos clo objotos
142쪽
Uma das caracte isticas mais marcantes das linguagens orientadas a o elos e a herunςu. Heranςa e a habili clade de definiis urna nOVa classe que e unia Versao modificada de unia classe existente. A principat vantagem dessa caracte istica e que Voce pode adicionar novos melodos a uma classe sem ter que modificara classe existente. Chama-se 'heranςQ porque a nova classe hercla todos os melodos da classe existente. Ampliando a metas a. podemos di Zer que a classe existente e as VeZes chamada de classe inde Parent). A nOVa classe pode serchamada de classe fillia ou simplesinente, 'subclasse '. A heranςa e uma caracteristica poderosa. Alguns programas que seriam complicados sem heranςa podem ser escritos de forma simples e concisa graςas a ela. E a heranςa tambem pode facilitar o reuso do codigo. uma VeZ que Voce pode adaptar o comportamento de classes existentes sem ter que modifica-las. Em alguns caSos. a estrutura da heranς areflete a natureZa real do problema. tornando O programa mais facit de entende Por outro laclo. a heranςa pode tornar iam programa fria disicit de ter. Quando um melodo e imocado. as VeZes naoesta claro onde procurar Sua definiquo. A parte relevante do codigo pode ser e spathada em Varios modulo S. E. tambem. multas das coisas que poclem ser fellas uti ligando heranςa tambem podem ser fellas de forma igital mente elegante soliate mai S) sem ela. Se a estrutura natural do problema nao se presta a utili Zar heranςa esse estilo de programaquo podetrarer mais problemas que VnningenS. Nesse capitulo. Vamos demonstrar O uso de heranς a como parte de uni programa que joga urna variante de Mico. Unidos nos sos objeti Vos e escreVer um codigo que pOSSa fer mutili Zado para implementar Outros j Ogos de cartas.
143쪽
Aprono a Computa octo com Python Documentatiori, Versao q.
Para quase lodos os jogos de baratho. e preciso representar uma mao de cartas. Uma mao de cartas e similar a ummaςo de baratho. Porque ambos suo formados por uma serie de cartas e ambos requerem operaς oes, como, udicionure remoVer cartas. Fora isso, a habili clade de embarathar a maO e o baratho tambem sao uteis. Mas. ao mesmo tempo. a maO e tambem dilarente do baratho. Dependendo do jOgo que esta sendo jogado. precisamos reali Zar algumas operaς oes nas maos de cartas que nao faZem senti do para o baratho inteiro. Por exemplo. no poquenpodemos classilicar uma mao strinca, stush. etc.) ou compara-la com outra mao: No jOgo de bridge. podemos querer computar a quanti clade de pontos que ita numa mao, a fini de faZer uni lance. Essa Si tuaquo fugere o uso de heranς a. Se MAO e uma Subclasse de BALA tera toclos os metOdos de Hara tio, e novos metoclos podem fer adicionados Na definiςao de classe, o nome da classe pat aparece entre parente SOS
Esse comando indica que a nova classe Meso hercla da classe existente Barcti O o construtor de Mao iniciali Za os atributos da mao que suo nomΘ e Ca Ttas. A string nomΘ identifica es Sa mao. proVaVel mente peto nome do jOgador que esta segurando as cartas. O nome e uni parametro Opcional com a stringvaZia como Valor delauit. Cartas e a lista de cartas da mao, iniciali ada coni uina lista vagia
De noVo, a et ipse indica que omitimos outros melodos. O melodo de listas appon I adiciona a nova carta no final dalista de curtus
Agora que temos Uma classe Mao, queremos distribuir cartas de BATAI O para inuos de cartas. Nao e imediata- mente obvio se esse melodo deVe ir na classe Mao ou na classe Paral O mas como ele Opera num unico baratho e possi vel mente) em Varias maos de cartas. e mais natural coloca-lo em PHTHI O. O melodo Iistri UUir deve ser bem gerat, ja que dilarentes jogos terno dilarentes requerimentos. Podemos querer distribuir o baratho inteiro de vina veZ so ou adicionar uina carin n cndu mRO. Iistri UUir recebe clois argumentos. urna lista sola mpla) de maOS e o numero total de cartas a serem cladas. Se naohouVer cartas fulicientes no baratho. O melodo da todas as cartas e para
144쪽
Apronoa Computacao com Python Documentatiori, Versao q.
o segundo parametro, nCHTζHS e Opcionai: O delauit e um numero grande o que na pratica significa que lodas ascartas do baratho seruo cladas se este parametro for omitido. A varia vel do laςo i vai de 0 a DC artes s - . A cada voltu do laςo, urna carta e removida do baratho, usando o melodo de lista pop. que remove e retorna o ultimo item na lista. o operador modulo R) permite dar cartas em no redor da mesa suma carta de cada VeZ para cada inno). Quando i eigual ao numero de maos na lista, a expressao i AOS volta para o comeςo da lista sindice 03.
145쪽
Apronoa Computacao com Python Documentatiori, Versao q.
Este e o primetro dOS casos que Vimos ate agora em que o melodo de iniciali Zaςao reali Za uma computaςm significativa; para alem de iniciali Zar atributos. Para implementarjogos especificos, podernos herclar de JO ODO CATTA A e adicionar caracteristicas para O noVo jOgo. Como exemplo, Vamos escreVer unia simulaςao de Mico. o objetivo do jogo e livrar-se das cartas que estiverem na mao. Para faZer isso, e preciso combinar cartas formando pares ou casais que tentiam a mesma cor e o mesmo numero ou figura. Por exemplo, o 4 de paus casa coni o 4 de espadas porque os clois naipes suo pretos. O Valete de copas combina com o Valete de ouros porque ambos suo vermelli S. Antes de mais nuda. a Dama de paus e removida do baratho. para que a Dama de espadas lique sem par. A Damade espadas enta 3 fag o p et do mico. As si cartas que sobram sao distribui das nos jogadores em no redor da mesa uina carta de cada VeZ para cada mao). Depois que as cartas foram cladas os j Ogadores devem faZer todos os casais possi Veis que ii Verem na mao, e em seguida descarta-los na mesa Quando ninguem mai S ti Ver nenlium par para descartan o jOgo comeς a. Na sua VeZ de jogar, O jogador pega urna cartassem olliar) do vigintio mais proximo a esquerda. que ainda ti Ver cartas. Se a carta escol hida casar com uma carta queele tem na Inao, ele descarta esse par. Quando todos os casais possi Veis ti Verem sido fellos; o jogador que liver sobrado com a Dama de espadas na mao perde O jogo. Em nossa simulaςao computacional do jOgo o computador joga todas as maos. InfeliZmente. algumas nuances dojogo presencial Se perdem. Num jogo presenciat. O jOgador que esta com o mico na mao pode usar uns truques para induZir o Vi Zinlio a pegar a carta, por exemplo, segurando-a mais alto que as Outras, Ou mais baixo ou se efforcando para que ela nao lique em destaque. Ja o computador simplesmente pega a carta do Vi Zinlio aleatoriamente. . .
Uma mao para jogar Mico requer algumas habili clades para alem das habili clades gerais de urna Ao. rimos definir
Comeςamos faZendo uma copia da lista de cartas. para poder perconer a copia enquanto remoVemos cartas do original. Uma VeZ que ΒΘ f. Oct Tt HS e modificada no laςo. nao queremos usa-la para controlar o percurso. Python posse sicarbem confuso se esti Ver percorrendo uma lista que esta naudando l
146쪽
Apronoa Computacao com Python Documentatiori, Versao q.
147쪽
Conin e uina acumul ador que sonia o numero de pares em cada mao e retorna o total. Quando o numero total de pares alca a 25. 50 cartas foram removidas das maOS; O que significa que sobrou SO uma carta e o jogo chegou ao sim A variavel VOg mantem controle sobre de quem e a VeZ de jOgar. Comeςa em 0 e incrementa de uni em um; quandontinge nUm HOS, O Operador modulo faZ ela retornar para 0. O melodo JO ATUQE recebe iam argumento que indica de quem e a VeZ de jogar. O Valor de retorno e o numero de pares Ditos durante essa rodada
148쪽
Apronoa Computacao com Python Documentatiori, Versao q.
149쪽
heranca inheritancei Habili clade de deliniis urna nova classe que e a versao modificada de urna classe definida anteriormente.
classe mae sparent class) A classe de quem a classe iii ha hercla. classe fit ho schild class) Um nova classe criada herdando de urna classe existente: tambem chamada de 'subclasse '.
150쪽
Nos temos Visto exemplos de atributos que referenciam outros objetos, que sao chamados reserencius emhuti clus uria a Sequo l2.8). Uma estriatura de clados cornum, a lista ligaclu. tira Vantagem desta caracte istica. bistas ligadas suo constitutdas de nos nodos) onde cada no contem uina referentia para O proximo no na lista. Alem disto, cada no contem tima uniclade de clados chamada a curga. Uma lista ligada e considerada urna estriatura cle claclos recorrente porque ela tem uma definiςm recorrente.
. Uma lista vagia, representada por Norie, ou Um no que contem um objeto carga e uma referentia para uma lista ligada. Estruturas de clados recorrentes sao adequadas para metodos recorrentes.