Python POO Flashcards

1
Q

O que é o __init__?

A

É o método construtor que inicializa os atributos do objeto.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Como chamamos a ação de chamar a classe?

A

Instanciação.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Explique brevemente a diferença entre Instance, Class e Static Methods

A

Instance: métodos que usam as variáveis de instância ao chamar self como parâmetro.

Class: têm cls como parâmetro e podem ser úteis em operações envolvendo a classe como um todo.

Static: não estão diretamente relacionados com a classe, mas se encontram dentro dela por organização.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Explique a diferença entre Instance e Class variables

A

Instance: são únicos para cada instância da classe. São declarados no construtor e podem ser acessadas e modificadas usando a palavra-chave self.

Class: pertencem à classe em si e são compartilhadas entre todas as suas instâncias. São declaradas dentro da classe e fora dos métodos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Explique o conceito de herança

A

É a construção de novas classes a partir de classes existentes. Uma subclasse (classe derivada) herda de uma superclasse (classe base)

Colocamos o nome da superclasse dentro do parêntesis após o nome da subclasse.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Explique a função super()

A

É útil quando queremos estender o comportamento da classe ao chamarmos um dos métodos da superclasse.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Explique Polimorfismo e cite suas 2 principais formas

A

Permite que objetos de diferentes classes sejam tratados como objetos de uma superclasse comum.

Permite que uma mesma interface (nome de método) seja usada para representar diferentes tipos de objetos.

Os 2 tipos são: compile-time (static) e runtime (dynamic)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Explique compile-time (static) polymorphism

A

É quando chamamos um método com número diferente de argumentos. Conseguimos isso com valores default ou listas de argumentos de comprimento de variável.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Explique runtime (dynamic) polymorphism

A

Também chamado de method overriding, permite que a subclasse crie uma implementação específica de um método da superclasse. Ou seja, a implementação é escolhida no tempo de execução a depender da classe do objeto.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Explique os 3 tipos de access modifiers

A

Public: em python por default todos os métodos são públicos e podem ser acessados de qualquer lugar.

Private: é possível somente sinalizar com um _ antes do nome. O método não deve ser utilizado fora da classe.

Protected: sinalizados com __ antes do nome. São considerados não públicos.

Obs: getters e setters não fazem sentido no contexto de python.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Explique classe abstrata

A

É uma classe que não pode ser instanciada e serve de blueprint para outras classes. Pode conter métodos abstratos, que não possuem implementação.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Explique interface

A

É um contrato que especifica um conjunto de métodos que uma classe precisa implementar.

Ao contrário de classes abstratas, interfaces não fornecem implementação de métodos, só declaram assinaturas de métodos.

Em python o conceito não faz tanto sentido por limitações da linguagem e podemos criar algo parecido com uma interface ao criar uma classe que contenha somente métodos abstratos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Explique herança múltipla

A

Permite que uma subclasse herde atributos e classes de mais de uma superclasse.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Explique Mixins

A

É uma forma de herança múltipla. Permite que você adicione funcionalidades a uma classe ao criar classes separadas que implementam comportamentos específicos e combine essas classes em uma.

A classe combinada permanece clean e é fácil adicionar comportamentos caso necessário.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Explique Compositions

A

Criamos um objeto complexo ao combinar objetos simples. Ao invés de usar herança, criamos instâncias de outras classes como atributos de classe, o que permite reutilização de funcionalidade enquanto torna o código mais flexível e separa melhor os problemas.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Explique MRO

A

Method Resolution Order. Python usa uma variação do C3 Linearization algorithm para calculá-lo.

Determina a ordem em que procuramos e chamamos métodos em cenários de herança múltipla. Leva em consideração a hierarquia de herança e a ordem das superclasses.

Ajuda a resolver ambiguidades e conflitos

17
Q

Explique magic methods e dê alguns exemplos

A

Também chamados de dunder methods são métodos especiais com double underscore __ no início e no final do nome do método.

Ex.
__init__
__str__ / __repr__
__add__
__len__
__eq__ / __lt__ / __le__ / __gt__ / __ge__
__call__ (permite que um objeto seja chamado como uma função)
__getitem__ / __setitem__

18
Q

Quais as vantagens de Compositions sobre Mixins?

A

Melhor Separação de Conceitos.
Maior flexibilidade.

19
Q

Quais as vantagens de Mixins sobre Compositions?

A

Reutilização de comportamento (no caso de queremos reutilizar um comportamento em múltiplas classes).

Extensão de classes existentes.

20
Q

Cite os 5 SOLID principles e explique brevemente cada um deles

A

S: Single Responsibility Principle (SRP)
Uma classe deve ter somente uma responsabilidade.

O: Open-Closed Principle (OCP)
Entidades de software devem estar abertos à extensão e fechados à modificação.

L: Liskov Substitution Principle (LSP)
Subclasses devem ser capazes de substituir a superclasse sem causar alterações.

I: Interface Segregation Principle (ISP)
Clientes não devem ser forçados a depender de interfaces que eles não usam –> Desenhar interfaces pequenas e específicas.

D: Dependency Inversion Principle (DIP)
Módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstractions.