SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Orientação a ObjetosOrientação a Objetos
com Pythoncom Python
e UMLe UML
George Mendonça
@george_mendonca
www.tihardcore.wordpress.com
Agenda
1. Super Mini Tutorial
2. UML
3. Classe minimalista
4. Atributo, escopo, instância e método
5. classmethod
6. Heranç a
7. Outros conceitos de OO
8. TDD com Python
9. Comunidades
Super Mini Tutorial Python
● Linguagem de programaç ão orientada a objetos
● Funcional
● Alto nível
● Interpretada
● Semântica dinâmica integrada
● Visualmente atraente e de fácil interpretaç ão e aprendizado
● Reduzindo custo de desenvolvimento e manutenç ão
● Para desenvolvimento de aplicativos, para web e mobile
● Acessível
Super Mini Tutorial Python
● Simplista – Mínimo esforç o do programador sobre o esforç o
computacional
● Clara e objetiva
● Não utiliza begin/end, chaves ou qualquer outro delimitador
● Identaç ão obrigató ria
● Tipagem dinâmida e forte
● Software Livre
● Criador: Guido van Rossum
● Mantido pela Python Software Foundation
Super Mini Tutorial Python
# Comentáriode 1 linha
'''
Comentário de várias
linhas
'''
# Variáveis
salario = 12000.0
# Função
def minhaFuncao(s):
print('Meu salário: %.2f')%(s)
minhaFuncao(salario) # Meu salário: 12000.00
# Condicional
if salario > 5000.00:
print('Sênior')
# coding: utf-8# coding: utf-8
# Comentáriode 1 linha
'''
Comentário de várias
linhas
'''
# Variáveis
salario = 12000.0
# Função
def minhaFuncao(s):
print('Meu salário: %.2f')%(s)
# Chamando a função e imprimindo salario
minhaFuncao(salario)
if salario > 5000.00:
print('Sênior')
UMLUML
● Unified Modeling Language
● Linguagem de modelagem para o desenvolvimento de
software
● Que permite representar um sistema de forma
padronizada
● Não uma metodologia, mas auxlilia na visualização do
modelo do projeto de software
● Na construção de projetos orientado a objetos, facilita a
comunicação entre os objetos
UMLUML
● Diagrama de classes
UMLUML
● Diagrama de classes
● Solftware Livre utilizado:
● Plant UML
● GPLv3
● http://plantuml.com
UML por notação !UML por notação !
Classe minimalistaminimalista em Python
● Vamos começ ar com a classe mais simples em Python:
class Minima:
pass
Atributo, escopo, instânciaAtributo, escopo, instância
e mé todoe mé todo
● Um atributo é uma variável da classe
class Empregado:
Salario = 8000.0 # PÚBLICO
_codigo = 1022 # PROTEGIDO
__senha = '%#$%%hk' # PRIVADO
Atributo, escopo, instânciaAtributo, escopo, instância
e mé todoe mé todo
● Um atributo é uma variável da classe
class Empregado:
salario = 8000.0
if __name__ == '__main__':
obj = Empregado()
print (obj.salario)
Console:
8000.0
Atributo, escopo, instânciaAtributo, escopo, instância
e mé todoe mé todo
● O atributo agora é uma variável da classe
Console:
8000.0
class Empregado:
__salario = 8000.0
def getSal(self):
return self.__salario
if __name__ == '__main__':
obj = Empregado()
print (obj.getSal())
salario é um atributo privado !
Só tem acesso na classe e
não pode ser acessado fora
dela!
Acesso via
método
Salario é
Recuperado
pelo método
getSal()
Atributo, escopo, instânciaAtributo, escopo, instância
e mé todoe mé todo
class Usuario():
def __init__(self, nome, senha):
self._nome = nome
self.__senha = senha
def __privado(self):
print ('Só acessa a classe')
def getNome(self):
return self._nome
def getSenha(self):
return self.__senha
if __name__ == '__main__':
us = Usuario('George', '%$@%FHGFG5457')
# print(us._nome()) # print(us._nome())
# => TypeError: 'str' object is not callable
# print(us.__senha) # print(us.__senha)
# => AttributeError: 'Usuario' object has no attribute '__senha'
# print(us.__privado())
# => AttributeError: 'Usuario' object has no attribute '__privado'
print(us.getNome())
print(us.getSenha())
Construtor
Método privado
Atrutos protegido e
privado respectivamente
Console:
George
%$@%FHGFG5457
Transformando um Mé todo em
Mé todo da Classe - ClassmethodClassmethod
● (mé todo) -> convertido em um mé todo da classe
(estático)
● Um método de classe recebe a classe como primeiro
argumento implícito
● Assim como um método de instância recebe a instância
class ClasseMetodo:
def f(self):
print('Massa !')
if __name__ == '__main__':
ClasseMetodo.f()
TypeError: unbound method f()
must be called with
MetodoClasse instance as first
argument (got nothing instead)f = classmethod(f)
Console:
Massa!
Heranç aHeranç a em Python
● Criando uma subclasse – Heranç a
● A herança também é utilizada para a propagação de metaclasses (ver
artigo Metaclasses em Python)
class Minima(object):
pass
ObjectObject é uma classe
já existente do core do
interpretador Python
Heranç aHeranç a em Python
class Menu():
__tipo = ""
def gera(self, tipo):
menu = Menu()
menu.__tipo = tipo
return menu
def getTipo(self):
return self.__tipo
class GeraMenu(Menu):
def vertical(self):
return Menu.gera(self, '> Menu Vertical').getTipo()
def horizontal(self):
return Menu.gera(self, '> Menu Horizontal').getTipo()
if __name__ == '__main__':
menu = GeraMenu()
print(menu.vertical())
print(menu.horizontal())
Console:
> Menu Vertical
> Menu Horizontal
● Heranç a Múltipla
Outros conceitos de OOOutros conceitos de OO em Python
class B(object): pass
class A(object):
def __init__(self, b):
self.b = b
if __name__ == '__main__':
b = B()
a = A(b)
print(a.b)
● Agragaç ão e
composiç ão
Console:
<__main__.B object at 0x7f808be4a9d0>
class C(object):
ola = 'ola'
class B(object): pass
class A(B, C):
pass
if __name__ == '__main__':
a = A()
print(a.ola)
Console:
Ola
TDDTDD – Um resumo só bre Test Driven
Development
● Desenvolvimento Guiado por Teste
● Kent Beck (XP)
● Qualidade
● Confiabilidade
● Prática: Teste priemeiro, implementação depois
● TDD com Python é Moleza!
● Existem vários frames, mas utilizaremos unittest para um
exemplo bem básico! (mais utilizado)
TDDTDD – Um resumo só bre Test Driven
Development
import unittest
from pyoo.tdd.Numeros import Numeros
class TesteNumeroPrimo(unittest.TestCase):
def testeParidade(self):
p = Numeros()
self.assertEqual(p.paridade(0), 0)
self.assertEqual(p.paridade(1), 1)
self.assertEqual(p.paridade(2), 0)
self.assertEqual(p.paridade(3), 1)
def testeFatorial(self):
p = Numeros()
self.assertEqual(p.fat(0), 1)
self.assertEqual(p.fat(1), 1)
self.assertEqual(p.fat(2), 2)
self.assertEqual(p.fat(3), 6)
self.assertEqual(p.fat(4), 24)
self.assertEqual(p.fat(5), 120)
if __name__ == '__main__':
unittest.main()
class Numeros():
def paridade(self, n):
return n % 2
def fat(self, x):
f = 1
for i in range(x):
f *= (i + 1)
return f
● A barrinha VERDE ...
TDDTDD – Um resumo só bre Test Driven
Development
ComunidadeComunidade
● Grypy-GO – Grupo de Usuários Python de Goiás
● https://www.facebook.com/groups/grupygo
● https://telegram.me/grupygo
● Grypy-DF – Grupo de Usuários Python do Distrito Federal
● https://www.facebook.com/groups/grupydf
● https://telegram.me/grupydf
● http://df.python.org.br
● Python Brasil
● https://www.facebook.com/pythonbrasil
● https://www.facebook.com/groups/python.brasil
Valeu galera, até o XIV FGSL!!!!!!!Valeu galera, até o XIV FGSL!!!!!!!
Obrigado!Obrigado!
Slides e có digo fonte:Slides e có digo fonte:
Git Lab:Git Lab: https://gitlab.com/gepds/poo/tree/master/eventos/XII-FGSLhttps://gitlab.com/gepds/poo/tree/master/eventos/XII-FGSL
SlideShare:SlideShare:
http://www.slideshare.net/georgemendonca/orientao-a-objetos-com-python-e-uml-xiii-fgshttp://www.slideshare.net/georgemendonca/orientao-a-objetos-com-python-e-uml-xiii-fgs
http://creativecommons.org/licenses/by-nd/3.0/
You can use this
OpenOffice Impress
template for
your personal,
educational and
business presentations.
Conditions of use
The copyright statement we
require you to include when
you use our material is:
© Copyright Showeet.com
http://www.showeet.com
Contact: Showeet@ymail.com
With the use of this free template you accept the
following use and license conditions.
You are free:
To Share — to copy, distribute and transmit the work
Under the following conditions:
Attribution — You must attribute the work in the manner specified by
the author or licensor (but not in any way that suggests that they
endorse you or your use of the work).
No Derivative Works — You may not alter, transform, or build upon
this work.
For any distribution, you must make clear to others the license terms of this work.
The best way to do this is with a link to this web page:
http://www.showeet.com/terms-of-use/
Any of the conditions can be waived if you get permission from showeet.com
In no event shall Showeet.com be liable for any indirect, special or consequential
damages arising out of or in connection with the use of the template, diagram or
map.

Weitere ähnliche Inhalte

Was ist angesagt?

Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alvesGrupython Ufla
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Leonardo Melo Santos
 
Introdução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonIntrodução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonFlávio Ribeiro
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETLeonardo Melo Santos
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em PythonRodrigo Hübner
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolsoJean Lopes
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...Manuel Menezes de Sequeira
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução BásicaChristian Perone
 
2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com PythonJardel Weyrich
 
Python - Programação funcional
Python - Programação funcionalPython - Programação funcional
Python - Programação funcionalfabiocerqueira
 

Was ist angesagt? (19)

Java7
Java7Java7
Java7
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 
Introdução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonIntrodução a Linguagem de Programação Python
Introdução a Linguagem de Programação Python
 
Java5
Java5Java5
Java5
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NET
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em Python
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolso
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
Java4
Java4Java4
Java4
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python
 
Python - Programação funcional
Python - Programação funcionalPython - Programação funcional
Python - Programação funcional
 
POO - Aula 10 - Polimorfismo
POO - Aula 10 - PolimorfismoPOO - Aula 10 - Polimorfismo
POO - Aula 10 - Polimorfismo
 

Ähnlich wie Orientação a Objetos com Python e UML - XIII FGSL

Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2Flávio Lisboa
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução PythonGleison Rodrigues
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Flávio Ribeiro
 
Introducao ao python - Luciana Mota
Introducao ao python - Luciana MotaIntroducao ao python - Luciana Mota
Introducao ao python - Luciana Motalucianacmota
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012Luís Cobucci
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Pythonguestac3de
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Sérgio Souza Costa
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Jaime Neto
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Luís Cobucci
 
Por que você deveria aprender python?
Por que você deveria aprender python?Por que você deveria aprender python?
Por que você deveria aprender python?Felipe Volpone
 
Python Training #1 ed.6
Python Training #1 ed.6 Python Training #1 ed.6
Python Training #1 ed.6 Fabio Spanhol
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonFlávio Ribeiro
 
C#4 – O que há de novo
C#4 – O que há de novoC#4 – O que há de novo
C#4 – O que há de novoGiovanni Bassi
 
Python Training #1, ed. 6
Python Training #1, ed. 6Python Training #1, ed. 6
Python Training #1, ed. 6Fabio Spanhol
 

Ähnlich wie Orientação a Objetos com Python e UML - XIII FGSL (20)

Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução Python
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
 
Introducao ao python - Luciana Mota
Introducao ao python - Luciana MotaIntroducao ao python - Luciana Mota
Introducao ao python - Luciana Mota
 
Aula python
Aula pythonAula python
Aula python
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Por que você deveria aprender python?
Por que você deveria aprender python?Por que você deveria aprender python?
Por que você deveria aprender python?
 
Python Training #1 ed.6
Python Training #1 ed.6 Python Training #1 ed.6
Python Training #1 ed.6
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
C#4 – O que há de novo
C#4 – O que há de novoC#4 – O que há de novo
C#4 – O que há de novo
 
Python Training #1, ed. 6
Python Training #1, ed. 6Python Training #1, ed. 6
Python Training #1, ed. 6
 

Mehr von George Mendonça

Iniciando na Programação com Python - FLISOL Paracatu 2016
Iniciando na Programação com Python - FLISOL Paracatu 2016Iniciando na Programação com Python - FLISOL Paracatu 2016
Iniciando na Programação com Python - FLISOL Paracatu 2016George Mendonça
 
Software livre, história, paradigmas, comunidade e colaboração
Software livre, história, paradigmas, comunidade e colaboraçãoSoftware livre, história, paradigmas, comunidade e colaboração
Software livre, história, paradigmas, comunidade e colaboraçãoGeorge Mendonça
 
Criando Projetos de Software Livre no meio Acadêmico
Criando Projetos de Software Livre no meio AcadêmicoCriando Projetos de Software Livre no meio Acadêmico
Criando Projetos de Software Livre no meio AcadêmicoGeorge Mendonça
 
WordPress para Desenvolvedores - Utilizando WP como framework de desenvolvime...
WordPress para Desenvolvedores - Utilizando WP como framework de desenvolvime...WordPress para Desenvolvedores - Utilizando WP como framework de desenvolvime...
WordPress para Desenvolvedores - Utilizando WP como framework de desenvolvime...George Mendonça
 
Confirurando Dababase Development no Eclipse Luna
Confirurando Dababase Development no Eclipse LunaConfirurando Dababase Development no Eclipse Luna
Confirurando Dababase Development no Eclipse LunaGeorge Mendonça
 
Dominando o WordPress - A plataforma de sites e blogs mais popular do mundo
Dominando o WordPress - A plataforma de sites e blogs mais popular do mundoDominando o WordPress - A plataforma de sites e blogs mais popular do mundo
Dominando o WordPress - A plataforma de sites e blogs mais popular do mundoGeorge Mendonça
 
Libre Office Magazine Edição 11
Libre Office Magazine Edição 11Libre Office Magazine Edição 11
Libre Office Magazine Edição 11George Mendonça
 
Desenvolvendo Um Projeto de um Portal Responsivo com WordPress - 10° FGSL
Desenvolvendo Um Projeto de um Portal Responsivo com WordPress - 10° FGSLDesenvolvendo Um Projeto de um Portal Responsivo com WordPress - 10° FGSL
Desenvolvendo Um Projeto de um Portal Responsivo com WordPress - 10° FGSLGeorge Mendonça
 
Quebrando Paradigmas e Conhecendo o Movimento Software Livre
Quebrando Paradigmas e Conhecendo o Movimento Software LivreQuebrando Paradigmas e Conhecendo o Movimento Software Livre
Quebrando Paradigmas e Conhecendo o Movimento Software LivreGeorge Mendonça
 
Discutindo Governança e Gestão de Projetos com Ferramentas Livres
Discutindo Governança e Gestão de Projetos com Ferramentas LivresDiscutindo Governança e Gestão de Projetos com Ferramentas Livres
Discutindo Governança e Gestão de Projetos com Ferramentas LivresGeorge Mendonça
 
Desenvolvendo Um Projeto de Um Portal Responsivo Com WordPress
Desenvolvendo Um Projeto de Um Portal Responsivo Com WordPressDesenvolvendo Um Projeto de Um Portal Responsivo Com WordPress
Desenvolvendo Um Projeto de Um Portal Responsivo Com WordPressGeorge Mendonça
 
Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013George Mendonça
 
Free Software in the Cloud - Deixe as Nuvens facilitar a sua vida com Softwar...
Free Software in the Cloud - Deixe as Nuvens facilitar a sua vida com Softwar...Free Software in the Cloud - Deixe as Nuvens facilitar a sua vida com Softwar...
Free Software in the Cloud - Deixe as Nuvens facilitar a sua vida com Softwar...George Mendonça
 
Palestra Batismo Digital como uma Ferramenta Social no Ensino de Software Liv...
Palestra Batismo Digital como uma Ferramenta Social no Ensino de Software Liv...Palestra Batismo Digital como uma Ferramenta Social no Ensino de Software Liv...
Palestra Batismo Digital como uma Ferramenta Social no Ensino de Software Liv...George Mendonça
 
Evangelismo e Missões - Elucidando o papel do cristão e da Igreja
Evangelismo e Missões - Elucidando o papel do cristão e da IgrejaEvangelismo e Missões - Elucidando o papel do cristão e da Igreja
Evangelismo e Missões - Elucidando o papel do cristão e da IgrejaGeorge Mendonça
 
Curriculum - George Mendonça
Curriculum - George MendonçaCurriculum - George Mendonça
Curriculum - George MendonçaGeorge Mendonça
 
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)George Mendonça
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosGeorge Mendonça
 

Mehr von George Mendonça (20)

Iniciando na Programação com Python - FLISOL Paracatu 2016
Iniciando na Programação com Python - FLISOL Paracatu 2016Iniciando na Programação com Python - FLISOL Paracatu 2016
Iniciando na Programação com Python - FLISOL Paracatu 2016
 
Software livre, história, paradigmas, comunidade e colaboração
Software livre, história, paradigmas, comunidade e colaboraçãoSoftware livre, história, paradigmas, comunidade e colaboração
Software livre, história, paradigmas, comunidade e colaboração
 
Criando Projetos de Software Livre no meio Acadêmico
Criando Projetos de Software Livre no meio AcadêmicoCriando Projetos de Software Livre no meio Acadêmico
Criando Projetos de Software Livre no meio Acadêmico
 
WordPress para Desenvolvedores - Utilizando WP como framework de desenvolvime...
WordPress para Desenvolvedores - Utilizando WP como framework de desenvolvime...WordPress para Desenvolvedores - Utilizando WP como framework de desenvolvime...
WordPress para Desenvolvedores - Utilizando WP como framework de desenvolvime...
 
Confirurando Dababase Development no Eclipse Luna
Confirurando Dababase Development no Eclipse LunaConfirurando Dababase Development no Eclipse Luna
Confirurando Dababase Development no Eclipse Luna
 
Dominando o WordPress - A plataforma de sites e blogs mais popular do mundo
Dominando o WordPress - A plataforma de sites e blogs mais popular do mundoDominando o WordPress - A plataforma de sites e blogs mais popular do mundo
Dominando o WordPress - A plataforma de sites e blogs mais popular do mundo
 
Libre Office Magazine Edição 11
Libre Office Magazine Edição 11Libre Office Magazine Edição 11
Libre Office Magazine Edição 11
 
Desenvolvendo Um Projeto de um Portal Responsivo com WordPress - 10° FGSL
Desenvolvendo Um Projeto de um Portal Responsivo com WordPress - 10° FGSLDesenvolvendo Um Projeto de um Portal Responsivo com WordPress - 10° FGSL
Desenvolvendo Um Projeto de um Portal Responsivo com WordPress - 10° FGSL
 
Codando com PHP e JQuery
Codando com PHP e JQueryCodando com PHP e JQuery
Codando com PHP e JQuery
 
Quebrando Paradigmas e Conhecendo o Movimento Software Livre
Quebrando Paradigmas e Conhecendo o Movimento Software LivreQuebrando Paradigmas e Conhecendo o Movimento Software Livre
Quebrando Paradigmas e Conhecendo o Movimento Software Livre
 
Discutindo Governança e Gestão de Projetos com Ferramentas Livres
Discutindo Governança e Gestão de Projetos com Ferramentas LivresDiscutindo Governança e Gestão de Projetos com Ferramentas Livres
Discutindo Governança e Gestão de Projetos com Ferramentas Livres
 
Desenvolvendo Um Projeto de Um Portal Responsivo Com WordPress
Desenvolvendo Um Projeto de Um Portal Responsivo Com WordPressDesenvolvendo Um Projeto de Um Portal Responsivo Com WordPress
Desenvolvendo Um Projeto de Um Portal Responsivo Com WordPress
 
Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013
 
Free Software in the Cloud - Deixe as Nuvens facilitar a sua vida com Softwar...
Free Software in the Cloud - Deixe as Nuvens facilitar a sua vida com Softwar...Free Software in the Cloud - Deixe as Nuvens facilitar a sua vida com Softwar...
Free Software in the Cloud - Deixe as Nuvens facilitar a sua vida com Softwar...
 
Palestra Batismo Digital como uma Ferramenta Social no Ensino de Software Liv...
Palestra Batismo Digital como uma Ferramenta Social no Ensino de Software Liv...Palestra Batismo Digital como uma Ferramenta Social no Ensino de Software Liv...
Palestra Batismo Digital como uma Ferramenta Social no Ensino de Software Liv...
 
FGSL - Batismo Digital
FGSL - Batismo DigitalFGSL - Batismo Digital
FGSL - Batismo Digital
 
Evangelismo e Missões - Elucidando o papel do cristão e da Igreja
Evangelismo e Missões - Elucidando o papel do cristão e da IgrejaEvangelismo e Missões - Elucidando o papel do cristão e da Igreja
Evangelismo e Missões - Elucidando o papel do cristão e da Igreja
 
Curriculum - George Mendonça
Curriculum - George MendonçaCurriculum - George Mendonça
Curriculum - George Mendonça
 
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e Objetos
 

Orientação a Objetos com Python e UML - XIII FGSL

  • 1. Orientação a ObjetosOrientação a Objetos com Pythoncom Python e UMLe UML George Mendonça @george_mendonca www.tihardcore.wordpress.com
  • 2. Agenda 1. Super Mini Tutorial 2. UML 3. Classe minimalista 4. Atributo, escopo, instância e método 5. classmethod 6. Heranç a 7. Outros conceitos de OO 8. TDD com Python 9. Comunidades
  • 3. Super Mini Tutorial Python ● Linguagem de programaç ão orientada a objetos ● Funcional ● Alto nível ● Interpretada ● Semântica dinâmica integrada ● Visualmente atraente e de fácil interpretaç ão e aprendizado ● Reduzindo custo de desenvolvimento e manutenç ão ● Para desenvolvimento de aplicativos, para web e mobile ● Acessível
  • 4. Super Mini Tutorial Python ● Simplista – Mínimo esforç o do programador sobre o esforç o computacional ● Clara e objetiva ● Não utiliza begin/end, chaves ou qualquer outro delimitador ● Identaç ão obrigató ria ● Tipagem dinâmida e forte ● Software Livre ● Criador: Guido van Rossum ● Mantido pela Python Software Foundation
  • 5. Super Mini Tutorial Python # Comentáriode 1 linha ''' Comentário de várias linhas ''' # Variáveis salario = 12000.0 # Função def minhaFuncao(s): print('Meu salário: %.2f')%(s) minhaFuncao(salario) # Meu salário: 12000.00 # Condicional if salario > 5000.00: print('Sênior') # coding: utf-8# coding: utf-8 # Comentáriode 1 linha ''' Comentário de várias linhas ''' # Variáveis salario = 12000.0 # Função def minhaFuncao(s): print('Meu salário: %.2f')%(s) # Chamando a função e imprimindo salario minhaFuncao(salario) if salario > 5000.00: print('Sênior')
  • 6. UMLUML ● Unified Modeling Language ● Linguagem de modelagem para o desenvolvimento de software ● Que permite representar um sistema de forma padronizada ● Não uma metodologia, mas auxlilia na visualização do modelo do projeto de software ● Na construção de projetos orientado a objetos, facilita a comunicação entre os objetos
  • 8. UMLUML ● Diagrama de classes ● Solftware Livre utilizado: ● Plant UML ● GPLv3 ● http://plantuml.com UML por notação !UML por notação !
  • 9. Classe minimalistaminimalista em Python ● Vamos começ ar com a classe mais simples em Python: class Minima: pass
  • 10. Atributo, escopo, instânciaAtributo, escopo, instância e mé todoe mé todo ● Um atributo é uma variável da classe class Empregado: Salario = 8000.0 # PÚBLICO _codigo = 1022 # PROTEGIDO __senha = '%#$%%hk' # PRIVADO
  • 11. Atributo, escopo, instânciaAtributo, escopo, instância e mé todoe mé todo ● Um atributo é uma variável da classe class Empregado: salario = 8000.0 if __name__ == '__main__': obj = Empregado() print (obj.salario) Console: 8000.0
  • 12. Atributo, escopo, instânciaAtributo, escopo, instância e mé todoe mé todo ● O atributo agora é uma variável da classe Console: 8000.0 class Empregado: __salario = 8000.0 def getSal(self): return self.__salario if __name__ == '__main__': obj = Empregado() print (obj.getSal()) salario é um atributo privado ! Só tem acesso na classe e não pode ser acessado fora dela! Acesso via método Salario é Recuperado pelo método getSal()
  • 13. Atributo, escopo, instânciaAtributo, escopo, instância e mé todoe mé todo class Usuario(): def __init__(self, nome, senha): self._nome = nome self.__senha = senha def __privado(self): print ('Só acessa a classe') def getNome(self): return self._nome def getSenha(self): return self.__senha if __name__ == '__main__': us = Usuario('George', '%$@%FHGFG5457') # print(us._nome()) # print(us._nome()) # => TypeError: 'str' object is not callable # print(us.__senha) # print(us.__senha) # => AttributeError: 'Usuario' object has no attribute '__senha' # print(us.__privado()) # => AttributeError: 'Usuario' object has no attribute '__privado' print(us.getNome()) print(us.getSenha()) Construtor Método privado Atrutos protegido e privado respectivamente Console: George %$@%FHGFG5457
  • 14. Transformando um Mé todo em Mé todo da Classe - ClassmethodClassmethod ● (mé todo) -> convertido em um mé todo da classe (estático) ● Um método de classe recebe a classe como primeiro argumento implícito ● Assim como um método de instância recebe a instância class ClasseMetodo: def f(self): print('Massa !') if __name__ == '__main__': ClasseMetodo.f() TypeError: unbound method f() must be called with MetodoClasse instance as first argument (got nothing instead)f = classmethod(f) Console: Massa!
  • 15. Heranç aHeranç a em Python ● Criando uma subclasse – Heranç a ● A herança também é utilizada para a propagação de metaclasses (ver artigo Metaclasses em Python) class Minima(object): pass ObjectObject é uma classe já existente do core do interpretador Python
  • 16. Heranç aHeranç a em Python class Menu(): __tipo = "" def gera(self, tipo): menu = Menu() menu.__tipo = tipo return menu def getTipo(self): return self.__tipo class GeraMenu(Menu): def vertical(self): return Menu.gera(self, '> Menu Vertical').getTipo() def horizontal(self): return Menu.gera(self, '> Menu Horizontal').getTipo() if __name__ == '__main__': menu = GeraMenu() print(menu.vertical()) print(menu.horizontal()) Console: > Menu Vertical > Menu Horizontal
  • 17. ● Heranç a Múltipla Outros conceitos de OOOutros conceitos de OO em Python class B(object): pass class A(object): def __init__(self, b): self.b = b if __name__ == '__main__': b = B() a = A(b) print(a.b) ● Agragaç ão e composiç ão Console: <__main__.B object at 0x7f808be4a9d0> class C(object): ola = 'ola' class B(object): pass class A(B, C): pass if __name__ == '__main__': a = A() print(a.ola) Console: Ola
  • 18. TDDTDD – Um resumo só bre Test Driven Development ● Desenvolvimento Guiado por Teste ● Kent Beck (XP) ● Qualidade ● Confiabilidade ● Prática: Teste priemeiro, implementação depois ● TDD com Python é Moleza! ● Existem vários frames, mas utilizaremos unittest para um exemplo bem básico! (mais utilizado)
  • 19. TDDTDD – Um resumo só bre Test Driven Development import unittest from pyoo.tdd.Numeros import Numeros class TesteNumeroPrimo(unittest.TestCase): def testeParidade(self): p = Numeros() self.assertEqual(p.paridade(0), 0) self.assertEqual(p.paridade(1), 1) self.assertEqual(p.paridade(2), 0) self.assertEqual(p.paridade(3), 1) def testeFatorial(self): p = Numeros() self.assertEqual(p.fat(0), 1) self.assertEqual(p.fat(1), 1) self.assertEqual(p.fat(2), 2) self.assertEqual(p.fat(3), 6) self.assertEqual(p.fat(4), 24) self.assertEqual(p.fat(5), 120) if __name__ == '__main__': unittest.main() class Numeros(): def paridade(self, n): return n % 2 def fat(self, x): f = 1 for i in range(x): f *= (i + 1) return f
  • 20. ● A barrinha VERDE ... TDDTDD – Um resumo só bre Test Driven Development
  • 21. ComunidadeComunidade ● Grypy-GO – Grupo de Usuários Python de Goiás ● https://www.facebook.com/groups/grupygo ● https://telegram.me/grupygo ● Grypy-DF – Grupo de Usuários Python do Distrito Federal ● https://www.facebook.com/groups/grupydf ● https://telegram.me/grupydf ● http://df.python.org.br ● Python Brasil ● https://www.facebook.com/pythonbrasil ● https://www.facebook.com/groups/python.brasil
  • 22. Valeu galera, até o XIV FGSL!!!!!!!Valeu galera, até o XIV FGSL!!!!!!! Obrigado!Obrigado! Slides e có digo fonte:Slides e có digo fonte: Git Lab:Git Lab: https://gitlab.com/gepds/poo/tree/master/eventos/XII-FGSLhttps://gitlab.com/gepds/poo/tree/master/eventos/XII-FGSL SlideShare:SlideShare: http://www.slideshare.net/georgemendonca/orientao-a-objetos-com-python-e-uml-xiii-fgshttp://www.slideshare.net/georgemendonca/orientao-a-objetos-com-python-e-uml-xiii-fgs
  • 23. http://creativecommons.org/licenses/by-nd/3.0/ You can use this OpenOffice Impress template for your personal, educational and business presentations. Conditions of use The copyright statement we require you to include when you use our material is: © Copyright Showeet.com http://www.showeet.com Contact: Showeet@ymail.com With the use of this free template you accept the following use and license conditions. You are free: To Share — to copy, distribute and transmit the work Under the following conditions: Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). No Derivative Works — You may not alter, transform, or build upon this work. For any distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page: http://www.showeet.com/terms-of-use/ Any of the conditions can be waived if you get permission from showeet.com In no event shall Showeet.com be liable for any indirect, special or consequential damages arising out of or in connection with the use of the template, diagram or map.