| | | |

Algoritmos e Programação I

7 Orientação a objetos

Material disponível para compra: e-book apostila. Consulte outras formas de colaboração aqui!

7.1 Classe e objeto

Uma classe é uma forma de estrutura que permite a alocação conjunta de dados e funções. Em Python, a sintaxe de definição de uma classe é

1class NomeDaClasse:
2    <bloco-0>
3    <bloco-1>
4    ...
5    <bloco-2>

Usualmente, os blocos de programação consistem de definições de funções (métodos). Por exemplo,

1class MinhaClasse:
2
3    def digaOla(self):
4        print('Olá, Mundo!')
5
6obj = MinhaClasse()
7obj.digaOla()

Neste código, temos a definição da classe MinhaClasse (linhas 1-3). Esta classe contém o método MinhaClasse.digaOla() (linhas 2-3). Obrigatoriamente, na definição de um método de uma classe deve conter o primeiro parâmetro self. Um objeto desta classe111Uma nova instância da classe. e identificado por obj é alocado na linha 5. Na linha 6, este objeto chama seu método obj.digaOla().

O método especial __init__() é executado na construção de cada nova instância da classe (objeto da classe). Por exemplo,

1class Brasileira:
2    pais = 'Brasil'
3    def __init__(self, nome):
4        self.nome = nome
5
6    def digaOla(self):
7        print('\nOlá!')
8        print(f'Eu me chamo {self.nome}.')
9        print(f'Sou do {self.pais}. :)')
10
11x = Brasileira('Fulane')
12x.digaOla()
13y = Brasileira('Beltrane')
14y.digaOla()

Aqui, o atributo Brasileira.pais é compartilhada entre todas as instâncias da classe (objetos), enquanto que Brasileira.nome é um atributo de cada objeto. O método __init__() (linhas 3-4) é executada no momento da criação de cada nova instância (linhas 11 e 13).

Exemplo 7.1.1.

No seguinte código, começamos a definição de uma classe para a manipulação de triângulos.

Código 11: classTriangulo.py
1import matplotlib.pyplot as plt
2
3class Triangulo:
4    '''
5    Classe Triangulo ABC.
6    '''
7
8    num_lados = 3
9
10    def __init__(self, A, B, C):
11        # vértices
12        self.A = A
13        self.B = B
14        self.C = C
15
16    def plot(self):
17        fig = plt.figure()
18        ax = fig.add_subplot()
19        # lados
20        ax.plot([self.A[0], self.B[0]],
21                [self.A[1], self.B[1]], marker='o', color='blue')
22        ax.text((self.A[0]+self.B[0])/2,
23                (self.A[1]+self.B[1])/2, 'c')
24        ax.plot([self.B[0], self.C[0]],
25                [self.B[1], self.C[1]], marker='o', color='blue')
26        ax.text((self.B[0]+self.C[0])/2,
27                (self.B[1]+self.C[1])/2, 'a')
28        ax.plot([self.C[0], self.A[0]],
29                [self.C[1], self.A[1]], marker='o', color='blue')
30        ax.text((self.A[0]+self.C[0])/2,
31                (self.A[1]+self.C[1])/2, 'b')
32        # vertices
33        ax.text(self.A[0], self.A[1], 'A')
34        ax.text(self.B[0], self.B[1], 'B')
35        ax.text(self.C[0], self.C[1], 'C')
36        ax.grid()
37        plt.show()
38
39tria = Triangulo((0., 0.),
40                (2., 0.),
41                (1., 1.))
42tria.plot()

7.1.1 Exercícios

E. 7.1.1.

Considere o Código 11. Adicione o método calcLados(), que computa e aloca o comprimento de cada lado do triângulo.


1import numpy as np
2import matplotlib.pyplot as plt
3
4class Triangulo:
5    '''
6    Classe Triangulo ABC.
7    '''
8
9    num_lados = 3
10
11    def __init__(self, A, B, C):
12        # vértices
13        self.A = A
14        self.B = B
15        self.C = C
16        # lados
17        self.a = 0.
18        self.b = 0.
19        self.c = 0.
20
21    def calcLados(self):
22        self.a = np.sqrt((self.B[0]-self.C[0])**2\
23                        + (self.B[1]-self.C[1])**2)
24        self.b = np.sqrt((self.A[0]-self.C[0])**2\
25                        + (self.A[1]-self.C[1])**2)
26        self.c = np.sqrt((self.A[0]-self.B[0])**2\
27                        + (self.A[1]-self.B[1])**2)
E. 7.1.2.

Considere o Código 11. Adicione o método calcPerimetro(), que computa e retorna o valor do perímetro do triângulo.


1import numpy as np
2import matplotlib.pyplot as plt
3
4class Triangulo:
5    ...
6
7    def perimetro(self):
8        return self.a + self.b + self.c
9
10    ...
E. 7.1.3.

Considere o Código 11. Adicione o método calcAngulos(), que computa e aloca os ângulos do triângulo.


Dica: use a Lei dos Cossenos.

E. 7.1.4.

Considere o Código 11. Adicione o método area(), que computa a área do triângulo.


Dica: use o Teorema de Herão.

E. 7.1.5.

Similar a classe Triangulo (Código 11), implemente uma nova classe Quadrilateros com as seguintes propriedades e métodos de quadriláteros ABCD:

  1. a)

    vértices (tuples).

  2. b)

    lados (floats).

  3. c)

    cálculo do perímetro (método).

  4. d)

    cálculo da área (método).

  5. e)

    visualização gráfica (método +plot+).

E. 7.1.6.

Implemente uma classe para a manipulação de polinômios de segundo grau. A classe deve conter as seguintes propriedades e métodos:

  1. a)

    coeficientes (floats).

  2. b)

    cálculo do ponto de interseção com o eixo y (método).

  3. c)

    cálculo do vértice da parábola associada ao polinômio (método).

  4. d)

    cálculo das raízes do polinômio (método).

  5. e)

    plotagem do gráfico do polinômio (método).


Dica: utilize a notação p(x)=ax2+bx+c.


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |