| | | |

Algoritmos e Programação I

Compre o e-book deste material aqui! Consulte outras formas de colaborar.

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 def digaOla(self):
3 print('Olá, Mundo!')
4
5obj = MinhaClasse()
6obj.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 classe4242endnote: 42Uma 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 num_lados = 3
8 def __init__(self, A, B, C):
9 # vértices
10 self.A = A
11 self.B = B
12 self.C = C
13
14 def plot(self):
15 fig = plt.figure()
16 ax = fig.add_subplot()
17 # lados
18 ax.plot([self.A[0], self.B[0]],
19 [self.A[1], self.B[1]], marker='o', color='blue')
20 ax.text((self.A[0]+self.B[0])/2,
21 (self.A[1]+self.B[1])/2, 'c')
22 ax.plot([self.B[0], self.C[0]],
23 [self.B[1], self.C[1]], marker='o', color='blue')
24 ax.text((self.B[0]+self.C[0])/2,
25 (self.B[1]+self.C[1])/2, 'a')
26 ax.plot([self.C[0], self.A[0]],
27 [self.C[1], self.A[1]], marker='o', color='blue')
28 ax.text((self.A[0]+self.C[0])/2,
29 (self.A[1]+self.C[1])/2, 'b')
30 # vertices
31 ax.text(self.A[0], self.A[1], 'A')
32 ax.text(self.B[0], self.B[1], 'B')
33 ax.text(self.C[0], self.C[1], 'C')
34 ax.grid()
35 plt.show()
36
37tria = Triangulo((0., 0.),
38 (2., 0.),
39 (1., 1.))
40tria.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.

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

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

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

Resposta 0.

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.

Resposta 0.

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

Resposta 0.

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.

Algoritmos e Programação I

Compre o e-book deste material aqui! Consulte outras formas de colaborar.

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 def digaOla(self):
3 print('Olá, Mundo!')
4
5obj = MinhaClasse()
6obj.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 classe4242endnote: 42Uma 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 num_lados = 3
8 def __init__(self, A, B, C):
9 # vértices
10 self.A = A
11 self.B = B
12 self.C = C
13
14 def plot(self):
15 fig = plt.figure()
16 ax = fig.add_subplot()
17 # lados
18 ax.plot([self.A[0], self.B[0]],
19 [self.A[1], self.B[1]], marker='o', color='blue')
20 ax.text((self.A[0]+self.B[0])/2,
21 (self.A[1]+self.B[1])/2, 'c')
22 ax.plot([self.B[0], self.C[0]],
23 [self.B[1], self.C[1]], marker='o', color='blue')
24 ax.text((self.B[0]+self.C[0])/2,
25 (self.B[1]+self.C[1])/2, 'a')
26 ax.plot([self.C[0], self.A[0]],
27 [self.C[1], self.A[1]], marker='o', color='blue')
28 ax.text((self.A[0]+self.C[0])/2,
29 (self.A[1]+self.C[1])/2, 'b')
30 # vertices
31 ax.text(self.A[0], self.A[1], 'A')
32 ax.text(self.B[0], self.B[1], 'B')
33 ax.text(self.C[0], self.C[1], 'C')
34 ax.grid()
35 plt.show()
36
37tria = Triangulo((0., 0.),
38 (2., 0.),
39 (1., 1.))
40tria.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.

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

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

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

Resposta 0.

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.

Resposta 0.

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

Resposta 0.

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
| | | |