Desenvolvimento Orientado a Objetos Utilizando a Linguagem Python

Pré-requisitos

Para que você obtenha um melhor desempenho neste curso, é recomendável ter conhecimentos em Lógica de Programação, Programação Orientada a Objetos e Linguagem de Programação Python.

Aqui na Escola Virtual nós oferecemos estes cursos em nosso catálogo:

Eles estão na área de interesse Programação.

COMUNIDAD PYTHON
https://python.org.br/

Estrutura do curso
Módulo 1

Instalação do Ambiente de Desenvolvimento.

Módulo 2

Introdução à Orientação a Objetos.

Módulo 3

Encapsulamento de Dados.

Módulo 4

Strings.

Instalação do Ambiente de Desenvolvimento Python e PyCharm

No curso Linguagem de Programação Python – Básico nós já fizemos toda a instalação do Python e da IDE PyCharm.

Então, se você já tem um ambiente de desenvolvimento Python instalado em seu computador, poderá utilizá-lo!

Caso você ainda não tenha e deseja instalar, pode consultar esses arquivos que disponibilizamos abaixo, com o passo a passo de instalação detalhado:

Caso você opte pela instalação do ambiente apresentado acima, não se esqueça de, primeiramente, certificar-se de que excluiu toda instalação Python já presente em seu computador (se for o caso).

O que aprendemos neste módulo

Instalação Python

Instalação PyCharm

Instalação Anaconda
VOLTAR MODULOS

Módulo 2

Introdução à Orientação a Objetos

Recapitulando…

No módulo anterior concluímos a instalação do ambiente de desenvolvimento, com o download da ferramenta Anaconda.

Agora, você já tem os três recursos fundamentais instalados para iniciar a programação: Python, PyCharm e Anaconda.

Neste módulo, você vai conhecer os paradigmas da orientação a objetos e aprender a aplicá-los na linguagem Python.

Vamos começar?

Orientação a Objetos na Linguagem Python

A linguagem Python foi criada para o desenvolvimento orientado a objetos, o que facilita muito a compreensão de alguns conceitos, torna a programação mais simples de ser compreendida e facilita o trabalho em equipe!

Projetos desenvolvidos utilizando a Orientação a Objetos são mais estáveis, de fácil manutenção e sua reutilização é mais simples.

Na linguagem Python, quando iniciamos um projeto, apesar dele poder ser desenvolvido utilizando os conceitos de programação procedural, a linguagem já vai pré organizá-lo para a orientação a objetos, pois ele será organizado por meio de estruturas denominadas Classes que vão armazenar trechos de códigos relacionados entre si.

Ao utilizar a classe definida não é necessário compreender como os trechos dela foram desenvolvidos, basta utilizá-los por meio de um processo conhecido como Abstração.

A seguir, vamos conhecer um pouco mais sobre alguns desses termos utilizados na linguagem Python!

Técnicas de Orientação a Objetos no Python

Agora, vamos conhecer alguns conceitos de orientação a objetos que são muito importantes para melhor compreensão no desenvolvimento de projetos na linguagem Python.

CLASSES

Definição do Objeto

Conjunto de atributos e funções utilizado como modelo para criação dos objetos.

OBJETOS

Instância de uma classe

Variável que possui todas as características comuns à classe, porém, com valores diferentes em seus atributos.

ABSTRAÇÃO

Acesso às utilidades da classe

Ação de utilizar mensagens para acessar os recursos de uma classe.

ATRIBUTOS

Características da classe

Os atributos são características do elemento que a classe representa.

FUNÇÕES

Ações do objeto com retorno

Função nativa do Python que retorna um valor declarado dentro da classe.

MÉTODOS

Ações do Objeto

Função nativa do Python que não possui retorno declarado dentro de uma classe.

EXCEÇÃO

Tratamento de erros

Controla o fluxo de execução durante um erro.

MENSAGEM

Chamada a um atributo, método ou função.

HERANÇA

Super classe e Sub Classe

Uma classe pode herdar atributos, métodos e/ou funções de outra.

ENCAPSULAMENTO

Níveis de acesso

O encapsulamento permite que os atributos sejam vistos somente nas classes onde foram declarados, definindo o nível de acesso de atributos, métodos ou funções.

POLIMORFISMO

Sobrescrita

Escolher entre os atributos, métodos e/ou funções que sobrescreveram ou que foram sobrescritos.

Desenvolvimento de Projeto Prático

É muito importante conhecer os conceitos de programação, mas como colocar em prática tudo o que foi visto na teoria?

Para visualizarmos a prática de desenvolvimento vamos criar um pequeno projeto de uma loja virtual. Nele, teremos desde o controle de clientes até as vendas.

Para o desenvolvimento do projeto, vamos utilizar o ambiente de Anaconda Python, instalado anteriormente.

Projeto

Início do Projeto

Definindo o diagrama de classes.

Diretório do Projeto

Para melhor organização dos arquivos do projeto e compilar as classes é fundamental definir um diretório base para armazenamento dos arquivos.

DEV

Crie uma pasta no diretório raiz do seu computador (C:). Isso facilitará o acesso e a manutenção dos arquivos.

Criando o Projeto na IDE PyCharm

Pulei esse processo por não ter acesso total de instalação no notebook e mensagem de o pycharm não ser gratuito (usarei até dar o visual studio code)

Criar Pasta App

Criando Classes no Projeto

As classes em Python nos auxiliam na otimização de um projeto.

Em um projeto orientado a objetos utilizamos as classes para definição dos objetos.

A seguir, vamos criar a primeira classe do nosso projeto!

Inicialmente, a função desta classe será apenas testar a compilação do programa, mas, no decorrer do curso, voltaremos a falar sobre ela.

Nomenclaturas Python

Antes de iniciarmos o projeto de desenvolvimento é muito importante compreender a nomenclatura dos elementos que compõem um projeto: Classes Variáveis Pacotes Objetos

Classes

Variáveis

Pacotes

Objetos

Parei aqui 17/06/24 – Retornei dia 18/06/24

A Comunidade Python determina algumas convenções para atribuir nomes a esses elementos.

Algumas convenções, caso ignoradas, não vão ocasionar erros ao código, mas manter um código organizado, seguindo as convenções, facilita muito o desenvolvimento e a compreensão do código, principalmente, quando o trabalho é realizado em equipe.

A seguir, vamos conhecer um pouco mais sobre essas nomenclaturas!

Definindo Nomenclatura para Elementos de um Projeto

CLASSES

  • Referente a caracteres, seguir o mesmo padrão de variáveis e objetos.
  • Sempre iniciar as classes com caracteres maiúsculos, inclusive as iniciais de nomes compostos:
    Exemplo: MinhaClasse()

VARIÁVEIS E/OU OBJETOS

  • Utilizar somente caracteres e letras minúsculas.
  • No caso de variáveis com nome composto, utilizar o underline para separação das palavras.
  • Não iniciar o nome com números (podemos utilizar números no nome, mas não devemos iniciar com eles).
  • Não utilizar caracteres especiais.
  • Não utilizar espaçamento em branco.
  • Evitar utilizar os caracteres I e O.

PACOTES, MÓDULOS E MÉTODOS

  • Utilizar nomes pequenos.
  • Utilizar sempre caracteres minúsculos.
  • Utilizar o underline para unir nomes compostos.

Classes no Projeto Python

O desenvolvimento de uma aplicação envolve os mais diferentes tipos de informações, que são modeladas com estruturas que conhecemos como classes.

A partir das classes é possível criar objetos, ou seja, uma classe é um “molde” para a criação de objetos.

Podemos afirmar que classe é um Tipo Abstrato de Dados (TAD), ou seja, o código que define e implementa um novo tipo de informação.

Criação de Objetos

Classe
Podemos dizer que a classe é o projeto do objeto, contendo o código de programação.
Objeto
É a execução do código de uma classe. Quando executamos o código de uma classe é criado um novo objeto na memória. Uma nova instância de um objeto é um tipo abstrato de informação de um novo tipo de dado.
Instância
Podemos dizer que a instância é o objeto sendo executado. Quando criamos um novo objeto, afirmamos que estamos criando uma instância dele.

Criando Classes no Projeto Python

O desenvolvimento de um projeto Python envolve várias classes.

No decorrer do curso já criamos uma primeira classe denominada Main, porém, não especificamos como essa declaração foi feita.

Vamos compreender a criação de uma classe no projeto Python?

Primeiramente, vamos iniciar criando o arquivo para desenvolvimento do código da classe.

Acesse(Aqui foi aberto Programa e criado uma classe = Cliente.py

Entendendo a Estrutura da Classe

Após o desenvolvimento de um projeto Python, chegou a hora de entendermos a estrutura da classe.

Declaração dos Membros da Classe

Utilizamos os membros da classe para manter uma mesma estrutura de tudo que pertence a determinada informação da classe.

Conforme já estudamos, classes são um tipo abstrato de dados, sendo assim, haverá valores e esses necessitam de funções específicas para serem manipulados.

Temos dois tipos básicos de membros que compõe uma classe:

Atributos(Propriedades)

Os atributos armazenam as características de uma classe.

Os atributos são as declarações de variáveis da classe.

Métodos

São ações da classe, suas funções.

Representam os estados e ações dos objetos quando instanciados.

Definindo o Método Construtor

Método Construtor é definido de forma implícita ou explícita por todas as classes e, como o próprio nome já cita, é utilizado para construir o objeto.

Todas as vezes que um objeto estiver sendo criado (instanciado) é por meio do Construtor que ele será inicializado.

Este método é invocado, automaticamente, pela máquina virtual do Python todas as vezes que um objeto é criado.

Inserindo o Método Construtor na Classe Cliente

Importante

Todo método Python tem self como primeiro parâmetro.

A palavra reservada representa o objeto em si, portanto, sempre que quisermos especificar atributos de objetos, devemos associá-lo à palavra reservada self.

Atributos da Classe

Lembre-se de que os atributos de uma classe representam as características que ela possui.

Agora, vamos ver como adicionar atributos, modificar uma classe e personalizar o Método Construtor.

Como Adicionar Atributos à Classe?

Para adicionar atributos a uma classe, basta definir o nome do atributo acompanhado da palavra reservada self, no método especial denominado _ _init_ _ do Método Construtor.

Como Modificar a Classe?

Vamos adicionar dois atributos à classe Cliente.

Primeiramente, remova a palavra reservada pass.

Em seguida, insira o código correspondente aos atributos.

Observe que o recuo indica que os atributos pertencem ao Método Construtor da classe.

Como Personalizar o Método Construtor?

Como já vimos, o Método Construtor tem a finalidade de estabelecer os valores obrigatórios para construção de um novo objeto.

O Método Construtor da classe pode conter um conjunto de parâmetros. Com isso, podemos determinar os valores para inicialização dos atributos.

Isso garante um melhor funcionamento de toda a estrutura do objeto, obrigando ao programador determinar valores default no momento da inicialização do objeto.

Importante

Na linguagem Python não é recomendável criar mais de um Método Construtor para a classe.

Instanciando Objetos

Na linguagem Python, as classes são utilizadas para definição dos objetos.

Podemos afirmar que a classe é o nosso código e, para que esse código seja utilizado, precisamos criar os objetos, assim, criamos instâncias do objeto.

Na orientação a objetos, instância e objetos são sinônimos.

Objetos no Python

Na linguagem Python, todo objeto criado possui um código de identificação composto por um número inteiro não negativo, conhecido como ID.

Assim, as instâncias de objetos são diferenciadas.

Esse ID diferencia objeto e atributos deste objeto.

Criando Referência de Classes

Para instanciar o objeto de uma classe para outra, devemos criar a referência da classe que será instanciada.

Instanciando um Novo Objeto

Testando o Projeto

Parei aqui 18/06/24 | Continuei aqui 19/06/24

Para verificarmos a prática de instanciar objetos, vamos acrescentar os comandos para impressão e, em seguida, compilar o nosso código.

Na prática

Projeto Controle Bancário

Vamos iniciar um projeto de controle bancário!

O objetivo do projeto é o desenvolvimento orientado a objetos para a execução de tarefas do cotidiano bancário, como saque, consulta de saldo e depósito.

Durante esta aula, já desenvolvemos a classe Cliente e seus atributos. Agora, vamos desenvolver a classe Conta, que será definida recebendo o objeto Cliente, além dos atributos “número” e “saldo”.

Classe Conta

Para desenvolver a classe Conta, crie um novo arquivo Python, por meio do menu File-New. Na caixa de texto New, escolha a opção Python File. Digite o nome Conta e pressione a tecla Enter, para finalizar.

Logo após, adicione a codificação inicial para a classe:

Testando o Projeto

Para verificar o funcionamento do projeto até o momento, modifique a classe Main, trazendo os dois objetos criados:

Analise o Resultado

Observe que, ao compilar o projeto (por meio da classe Main), as informações são impressas e a informação relacionada ao titular é trazida do objeto Cliente:

Etapa Concluída

Até aqui conseguimos compreender sobre o conceito de Orientação a Objetos aplicado na linguagem Python.

Criamos uma classe com seus respectivos atributos, adicionamos métodos e, por fim, instanciamos objetos.

No próximo módulo, você vai conhecer sobre o conceito de encapsulamento de dados, alterando a visibilidade dos membros e aplicando os métodos setter e getter.

O que aprendemos neste módulo

Módulo 3

Encapsulamento de Dados

VOLTAR MODULOS

Recapitulando…

No módulo anterior você conheceu os paradigmas da orientação a objetos e aprendeu a aplicá-los na linguagem Python.

Neste módulo, você vai conhecer o conceito de encapsulamento de dados, alterando a visibilidade dos membros e aplicando os métodos Getter e Setter.

Vamos começar?

Encapsulamento de Dados

Uma das principais vantagens do conceito de orientação a objetos é a utilização de estruturas sem a necessidade de conhecer como elas foram implementadas.

Para isso, o conceito de encapsulamento de dados torna-se essencial, pois envolve a proteção dos atributos ou métodos de uma classe.

A ideia de encapsular o código vem com a premissa de proteger atributos e métodos de uma classe (tornando-os privados), de forma que somente a classe onde as declarações foram feitas tenham acesso.

Esse conceito garante a integridade das informações e também facilita a utilização das implementações.

O conceito de encapsulamento traz o isolamento do código, ou seja, variáveis e funções que são utilizadas internamente não devem estar disponíveis externamente.

Importante

Diferente da maioria das linguagens, como Java, PHP e C#, o Python (independente da nomenclatura), mantém todos os atributos e métodos públicos.

Isso não significa que todas as funções de uma classe podem ser chamadas por outras ou, principalmente, que todos os atributos podem ser lidos e alterados sem cuidados.

Para isso, na linguagem Python temos o que chamamos de convenção para aplicação destes conceitos de orientação a objetos.

É muito importante ressaltar que a maioria das IDEs (inclusive o PyCharm) oculta, automaticamente, atributos ou classes quando utilizamos a convenção de forma correta.

Modificadores de Acesso

De forma geral, todas as linguagens de programação que utilizam orientação a objetos usam modificadores de acesso para alterar a visibilidade de classes, atributos e métodos.

Para a implementação do encapsulamento é fundamental alterarmos a visibilidade dos atributos de uma classe. Para isso, utilizamos os modificadores de acesso.

Diferentemente de outras linguagens, como o Java e o C#, que utilizam palavras reservadas, a linguagem Python utiliza o símbolo underscore ”_”.

Dentro da orientação a objetos temos os modificadores Public, Protected e Private.

A seguir, vamos conhecer as principais características de cada um deles.

Public

É o mais comum entre os modificadores.

Ele permite acesso tanto de dentro, quanto de fora de uma classe.

Sua implementação se dá por meio do uso do underline ”_” na frente do nome.

Protected

  • Utilizando o modificador protegido, somente suas classes e subclasses terão acesso ao atributo ou método.Para sua implementação adicione um underline ”_” antes do nome.

Private

É o modificador mais restrito do desenvolvimento orientado a objetos.

Ele permite que somente a sua classe (onde foi definido) tenha acesso a um determinado atributo ou método.

Para definir o método private adicionamos underline duplo ”__” na frente do nome

Visibilidade dos Membros

Um dos recursos mais importantes da orientação a objetos é o de restringir o acesso às variáveis de um objeto e a alguns métodos.

O objetivo principal desta ação é evitar que variáveis internas sejam acessadas e recebam valores diretamente ou, ainda, que métodos internos sejam invocados externamente, garantindo, assim, a integridade das informações.

Para modificar a visualização de um membro dentro das IDEs utilizamos as convenções apresentadas para a linguagem.

Na prática

Modificando os Atributos

Para iniciar o processo de encapsulamento, vamos modificar os atributos das classes já criadas de forma que fiquem privados. Vamos iniciar pela classe Cliente.

Métodos de Acesso (Get e Set)

Para permitir o acesso aos atributos de forma controlada, a prática mais comum é a utilização de dois métodos de acesso: um retornando valor e outro que muda valor.

Getters e Setters são usados na maioria das linguagens de programação orientada a objetos com o objetivo de garantir o princípio de encapsulamento de dados.

Os métodos são utilizados para implementações que alteram os valores internos da classe ou que retornam valores dela.

Get

  • Sempre retornam valores.O método Get é utilizado para ler os valores internos do objeto e enviá-los como valor de retorno da função.

Set

  • Recebem valores por parâmetros.Os métodos Set recebem argumentos que serão atribuídos a membros internos do objeto.

Sintaxe dos Métodos de Acesso

Na prática

Criando os Métodos de Acesso

Dando continuidade ao processo de encapsulamento, vamos desenvolver os métodos de acesso nas classes já criadas. Assim, vamos acessar os atributos privados. Vamos iniciar pela classe Cliente.

#Exercício feito em Visual Studio Code
C:\Users\Public\ESTUDOS\BRADESCO-CURSOS\DESENVOLVIMENTO-ORIENTADO-OBJETO-LINGUAGEM-PYTHON\app

Forma “Pythônica” de Encapsular Dados

Encapsular os dados de uma classe é muito importante, pois deixa seu sistema organizado para possíveis mudanças.

Quando os dados estão encapsulados não é necessário mudar as regras de negócio em vários lugares, mas sim em um único lugar, já que essa regra está encapsulada.

O conjunto de métodos públicos de uma classe é conhecido como Interface da classe, sendo a única maneira de comunicação com os objetos da classe.

Na prática, em Python (diferentemente da linguagem Java), o “_” (underline) antes do atributo não impede o acesso dele em outra classe, ou seja, ele não fica privado.

Essa forma é somente um indicativo de que os métodos nos quais os nomes iniciam com “_” (underline) não devem (mas podem) ser acessados.

Isso pode trazer problemas?

Em alguns casos pode sim! Por exemplo, na manipulação da classe Conta, o atributo saldo deve ser manipulado somente pelos métodos Saque() e Depósito() evitando, assim, que seja inserido um valor negativo no saldo.

Em alguns atributos é muito importante preservar o valor iniciado na classe, não sendo possível realizar a inserção de qualquer valor no atributo, a não ser por meio de métodos.

No caso do atributo saldo, por exemplo, ele não deve ficar negativo.

Na prática

Alterando a Classe Conta

Para o atributo saldo não ser negativo, a utilização do método setter é justificável, ficando do seguinte modo:

Resumindo Getter e Setter no Python

Tradicionalmente, as linguagens de programação orientada a objetos relatam que atributos e métodos tem de ser separados basicamente em “público” e “privado”.

A linguagem Java, em particular, sugere, por meio da sua sintaxe e práticas, que a maior parte dos atributos seja privada e, para sua manipulação, sejam criados os métodos, neste caso, os getters e setters.

Em Python, este conceito de “público e privado” não existe na sintaxe da linguagem.

O que temos em Python é a convenção de estilo que diz que nomes de atributos, métodos e funções iniciados com “_” (underscore) não devem ser usados por usuários de uma classe, só pelos próprios implementadores e que o funcionamento desses métodos e funções pode mudar sem aviso prévio.

Portanto, não é considerado errado, no Python, deixar os atributos simplesmente como atributos de instância de forma simples, onde qualquer usuário da classe pode ler ou alterar, sem depender de nenhum outro mecanismo.

No entanto, os métodos getter e setter podem ser utilizados com funcionalidades adicionais, conforme colocado no atributo saldo do nosso exemplo.

Protocolo de Descritores – Decorator

Um decorator é um padrão de projeto de software que permite adicionar comportamento a um objeto já existente, em tempo de execução, ou seja, agrega, de forma dinâmica, responsabilidades adicionais a um objeto.

Na prática, o decorator permite que atributos de uma classe tenham responsabilidades.

Um decorator é um objeto invocável, uma função que aceita outra função como parâmetro (a função decorada).

O decorator pode realizar algum processamento com a função decorada e devolvê-la ou substituí-la por outra função.

@Property

A linguagem Python traz uma outra solução para manter os atributos privados, conhecida como Property.

A função Property é um Decorator e é utilizada para obter um valor de um atributo.

Basicamente, a função Property permite que você declare uma função para obter o valor de um atributo.

Na prática

Podemos alterar a classe Conta utilizando Property da seguinte forma:

Importante

Em Python, não é considerada uma boa prática criar uma classe e, logo em seguida, adicionar propriedades (property) para todos os atributos.

A função Property deve ser utilizada somente se você precisar da funcionalidade de transformar ou verificar um atributo quando ele é atribuído ou lido.

Etapa Concluída

Neste módulo foi possível ter uma maior compreensão sobre encapsulamento de dados e de como a linguagem Python trabalha de forma diferenciada das outras linguagens neste conceito.

Em nosso projeto prático definimos os atributos, assim como sua convenção de acesso.

No próximo módulo, você vai conhecer mais sobre String e sobre as várias formas de manipulação deste tipo de dado.

Módulo 4

Strings

Recapitulando…

No módulo anterior você conheceu o conceito de encapsulamento de dados, alterando a visibilidade dos membros e aplicando os métodos Getter e Setter.

Neste módulo, você vai conhecer mais sobre String e, também, sobre as várias formas de manipulação deste tipo de dado.

Vamos começar?

Introdução a String

Dados textuais no Python são tratados como objetos str ou strings.

Podemos definir que String é qualquer tipo de texto que está entre aspas simples ou aspas duplas.

Podemos considerar uma String qualquer sequência de caracteres, seja sequência numérica, letras do alfabeto ou caracteres especiais.

O tipo String é conhecido como uma cadeia de caracteres. Podemos imaginar uma string como uma sequência de blocos onde cada letra, número ou espaço em branco ocupa uma posição.

A linguagem Python traz três maneiras de trabalharmos dados do tipo string e é isso que veremos a seguir!

Trabalhando Dados por Tipo de String

Função len()

A linguagem Python traz o tamanho associado à variável do tipo string. Esse tamanho se dá pela quantidade de caracteres armazenados na variável, onde o conteúdo pode ser acessado caractere por caractere.

O tamanho de uma string pode ser obtido utilizando a função len(). Essa função retorna o número de caracteres armazenados em uma string. Ela retorna um único valor, indicando a quantidade de caracteres contidos na variável.

Na prática

Adicionando Métodos ao Projeto

Vamos adicionar os métodos ao projeto controle bancário.

Vamos iniciar adicionando o método saque() na classe Conta.

Agora, vamos adicionar o método deposita() também na classe Conta.

Vamos também adicionar o método Extrato() que trará as informações da Conta.

Manipulando os Dados

Por fim, vamos manipular os dados por meio da chamada de métodos na classe Main().

Observe que todos os dados foram manipulados por meio das chamadas dos métodos.

VOLTAR MÓDULOS




Share the Post:
Powered by Joinchat