Sie sind auf Seite 1von 56

13ProgramacinOrientadaa

ObjetosenPython3

DiegoAndrsAlvarezMarn
ProfesorAsociado
UniversidadNacionaldeColombia
SedeManizales

1
Tabladecontenido
Historia
Vocabulario
Laclasemnima
Atributosdelaclasey
delobjeto

2
Laprogramacinorientadaa
objetos(POO)
Apareci con el lenguaje Simula 67 en 1967 y
posteriormente dicho paradigma fue mejorado
conellenguajeSmalltalkenlos1970s.
El lenguaje C++ y el lenguaje Java
popularizaron su uso, especialmente, porque la
POO se utiliza frecuentemente para hacer los
entornosgrficosdelosprogramas(GUIs).
Python es un lenguaje primariamente orientado
a objetos, ya que en este todas las entidades
sonobjetos. 3
Vocabulario
Un objeto es una realizacin de una clase. Por ejemplo, en un juego de
estrategia,consideremoslaclaseguerrero.Enel contextodePOOcada
guerrerodeljuegoseraunobjeto,cadaunodeellosconatributos(edad,
salud,coraza,etc)ymtodos(caminar,pelear,comer,etc.)
Los datos que pertenecen a un objeto se les llama los "atributos (o
propiedades)delobjeto".Enunprogramaorientadoaobjetos,estosestn
ocultosatravsdeunainterfase,ysolosepuedeaccederalosatributos
del objeto a travs de funciones especiales, a las cuales se les llama
mtodos en el contexto de la POO. El poner los datos detrs de la
interfaseselellamaencapsulacin.
En trminos generales, un objeto se define por una clase. Una clase es
una descripcin formal del diseo de un objeto, es decir, especifica los
atributos y mtodos que el objeto tiene. A estos objetos tambin se les
llamaincorrectamenteenespaolinstancias(delingls"instances").Evite
confundirunaclaseconunobjeto.JorgeyMarasoninstanciasdelaclase
Persona.Nombrelaclaseconlaprimeraletraenmayscula. 4
EnPythontodaslasentidadesson
objetos
Guido van Rossum escribi: "One of my
goals for Python was to make it so that all
objectswere"firstclass."Bythis,Imeantthat
I wanted all objects that could be named in
the language (e.g., integers, strings,
functions,classes,modules,methods,andso
on)tohaveequalstatus.Thatis,theycanbe
assigned to variables, placed in lists, stored
indictionaries,passedasarguments,andso
forth."(Blog,TheHistoryofPython,February
27,2009)

5
Aqu L1 y L2 son objetos, los
cuales son realizaciones de la
clase list. Ellos tienen mtodos
asociados(append(),pop()).

6
LaclasemnimaenPython

Roboteslaclase
x,ysonobjetos

Eloperador=copiala

referencia.

LasdosinstanciasdelaclaseRobotsondiferentes.

7
Clasesdesolo
atributos
(similaralas
estructurasen Atributosde
C/C++) laclase

Atributos
delobjeto

8
Un problema muy comn cuando trabajamos con clases, es no especificar
con qu instancia de la clase queremos hacerlo. Si solo se ha creado una
direccin, es comprensible asumir que el computador sabr cmo usar la
direccin de la que ests hablando. Sin embargo, esto no siempre es as.
Observaelsiguienteejemplo:

9
10
Agregandomtodos
aunaclase

EstoesequivalenteadecirPerro.imprimir(p)Observe
queaquselfserefiereap.Lanotacinp.imprimir()
11
espreferibleyaqueeslaestndarenPOO.
Tresformasdiferentesdellamara
unmtodo

12
Agregandomtodosaunaclase
Cuando cree mtodos para las clases, tenga en cuenta las siguientes
observaciones:
Primerosedebenlistarlosatributos,luegolosmtodos.
El primer parmetro de un mtodo de una clase debe ser self. Este
parmetroserequiere,inclusosilafuncinnolousa.
Comotalllamarelprimerparmetroself esunaconvencin(self no
es una palabra reservada); podra usarse otro nombre, sin embargo,
estanextendidosuuso,queserecomiendautilizardichapalabra.

self es como decir el pronombre mi (en lenguaje C++ es


equivalentea this),yaquedentrodeunaclaseestoyhablandodemi
nombre,midireccin,mipeso,yfueradelaclaseestoyhablandodel
pero,nombreydireccindeeseobjeto.
Lasdefinicionesdelosmtodosdebenidentarse.
13
Elmtodoconstructor
EnPOO,unconstructoresunmtododelaclase
cuyamisinesinicializarunobjetodeunaclase.
En el constructor se asignan los valores iniciales
de los atributos del nuevo objeto, y en ciertos
casos prepara el sistema para la creacin del
nuevo objeto. Este mtodo se invoca
automticamente cada vez que una instancia de
unaclaseescreada.

El constructor en Python es el mtodo


__init__() 14
Constructores
conparmetros

15
Atributosdelobjetovs.
Atributosdelaclase
Unatributodelobjetoesunavariablequetomaelvalordeacuerdo
alobjeto.Porejemploenunahabitacinllenadegente,cadapersona
tieneunaedad.Tambinselellamainstanceattributes(eningls).
They are owned by the specific instances of a class. This means for
twodifferentinstancestheinstanceattributesareusuallydifferent.

Losatributosdelaclasepertenecenalaclasemisma;sonatributos
quesoncompartidosportodoslosobjetosdelaclase,porloquees
el mismo atributo para cada objeto de la clase. We define class
attributes outside of all the methods, usually they are placed at the
top, right below the class header. Por ejemplo en un grupo de
personas,todassonhumanos.Sonaquellasvariablesquesedefinen
dentro de la clase pero fuera de los mtodos. Tambin se le llama
classattributes(eningls) 16
Losatributosdel
objetopueden
ocultarlosatributos
delaclase

17
En ClassA y es un
atributodelobjeto.
En ClassB x es un

atributodelaclase.

CAMBIARTEXTO!!!

18
CAMBIARTEXTO!!!

Losatributosdelobjetopueden
ocultarlosatributosdelaclase 19
Elatributo__dict__

Ver:
http://www.pythoncourse.eu/python3_class_and_instance_attributes.php

20
Elatributo__dict__
Continuandoconelejemploanterior:

Con el atributo __dict__ de una instancia, se pueden


observar los atributos del objeto junto con sus
correspondientesvalores.
Con el atributo __dict__ de una clase, se pueden

observar los atributos de la clase junto con sus


correspondientesvalores. 21
Lafuncingetattr()

Sielparmetronoexiste,retorna
elvalordadopordefecto.

22
Agregandoatributosalasfunciones
Agregar atributos a objetos es
posible en Python; incluso las
funciones pueden tener atributos.
Este tipo de atributos seran
atributosdelobjeto.

Estehechosepuedeutilizarparadefinir
variables estticas (en el sentido de
lenguaje C) en Python. Las variables
estticassonaquellasqueconservansu
23
valorentrellamadosafunciones
Elmtodo__str__()

24
Losmtodos
__str__()y__repr__()

25
If a class has a __str__
method, the method will be
used for an instance x of
that class, if either the
functionstrisappliedtoitor
if it is used in a print
function. __str__ will not be
used, if repr is called, or if
Salida por defecto de un we try to output the value
objetosinmtodo__repr__
directly in an interactive
Pythonshell.

Otherwise, if a class has


only the __repr__ method
and no __str__ method,
__repr__ will be applied in
the situations, where
__str__ would be applied,
26
if
itwereavailable.
Cuandousar__repr__ycuandousar__str__
__str__ is always the right
choice,iftheoutputshouldbe
for the end user or in other
words, if it should be nicely
printed.
__repr__ on the other hand is
used for the internal
representation of an object.
Theoutputof__repr__should
beiffeasibleastringwhich
can be parsed by the python
interpreter. The result of this
parsingisinanequalobject.
This means that the following
should be True for an object
"obj":
27

obj == eval(repr(obj))
Referenciasyobjetos

Eloperador=copia
lareferencia,noel
objetocomotal

28
Objetos,funcionesyreferencias

Estaeslatabladesmboloscuando
setermindeejecutarestalnea.A
consignar_dinero_2()seest
transfiriendounareferenciaajuan,
29
nounacopiadejuan.
Elmtodode
copia

30
Atributospblicos,privadosy
protegidos
Losatributosprivados(comienzancondosguiones
bajos __) solo pueden ser llamados dentro de la
definicin de la clase. Por fuera de la clase son
inaccesibleseinvisibles.
Losatributos protegidosorestringidos(comienzan
conunguinbajo_)solosepuedenllamardesde
lassubclasescuandohayherenciaysubclases.
Losatributospblicos(comienzanconunaletra)se
pueden accesar libremente, dentro y fuera de la
definicindelaclase.
31
Sepuedeacceder
(leer/escribir)aunobjeto
privadomediante:
_nombreclase__atributo
Porejemplo_A__privado
SINEMBARGONOLOHAGA!

32
Elmtododestructor
In OOP, a destructor is a method which is automatically
invokedwhentheobjectisdisappearsfrommemory.Itcan
happen when its lifetime is bound to scope and the
execution leaves the scope, when it is embedded into
another object whose lifetime ends, or when it was
allocated dynamically and is released explicitly. Its main
purposeistofreetheresources(memoryallocations,open
files or sockets, database connections, resource locks,
etc.) which were acquired by the object along its life cycle
and/or deregister from other entities which may keep
referencestoit.

EldestructorenPythoneselmtodo__del__() 33
Losmtodosconstructor__init__()y
destructor__del__()

34
Mtodosestticos
Observe el siguiente problema
cuando accedemos un atributo
privadodelaclase.

Sitratamosdeutilizarelmtodo
Robot.RobotInstances1(),
observequeapareceunerror.

Este aparece ya que no existe


un objeto asociado que se
puedareferiralavariableself.

35
Ahora, si tratamos de utilizar el
mtodo RobotInstances2(), el
cual est definido sin el
parmetro self, entonces
podemos acceder al atributo
privado __counter a travs de
Robot.RobotInstances2(); sin
embargo,cuandolotratamosde
acceder a travs de un objeto
tenemos un error, porque el
llamado del objeto
inmediatamente pasa el
parmetro self que nadie est
recibiendo.

36
Nosotros queremos un mtodo que
pueda acceder al atributo privado de la
clase ya sea a travs del nombre de la
claseoatravsdelnombredeunobjeto.

La solucin la proveen los llamados


mtodos estticos, los cuales no
requierenunareferenciaaunobjeto.

Para crear un mtodo esttico se


requiere agregar la lnea
"@staticmethod" justo antes del
encabezado del mtodo. La lnea
"@staticmethod" se le conoce en la
terminologa de Python como un
decorador.

Observeentonceselcomportamientodel
mtodo esttico RobotInstances3(). Es
justoloquedesebamos. 37
Mtodosclase
Los mtodos clase (class
methods), al igual que los
mtodos estticos no
dependen de los objetos,
pero a diferencia de los
mtodos estticos, ellos si
dependen de la clase a la
cual pertenecen. De hecho,
el primer parmetro de un
mtodo clase es una
referenciaalaclase.

Estos mtodos se pueden


llamaratravsdeunobjeto
outilizandoelnombredela
38
clase.
Mtodosclase

Ver:
http://www.pythoncourse.eu/python3_class_and_instance_attributes.php

39
Encapsulacindedatos
http://en.wikipedia.org/wiki/Encapsulation_%28objectoriented_programming%29

En POO, se denomina encapsulamiento al ocultamiento de los


atributosy/omtodosdeunobjetodemaneraquesolosepueda
cambiarmediantelasmtodosdefinidosparaesaclase.

El aislamiento protege a los datos asociados de un objeto contra


su modificacin por quien no tenga derecho a acceder a ellos,
eliminando efectos secundarios e interacciones. De esta forma el
usuario de la clase puede obviar la implementacin de los
mtodos y propiedades para concentrarse slo en cmo usarlos.
Porotroladoseevitaqueelusuariopuedacambiarsuestadode
manerasimprevistaseincontroladas.

Formasdeencapsular:Pblica,Protegidaorestringida,Privada
40
Mtodosdeaccesoymtodosdemutacin
(gettersandsetters)
http://en.wikipedia.org/wiki/Mutator_method

Estos mtodos sirven para


Mtodode implementar el principio de la
acceso encapsulacin de datos en
Mtodode
POO.
mutacin
Los mtodos de acceso
(getters o accessors en
ingls), sirven para acceder a
las propiedades (privadas) de
unobjeto.
Los mtodos de mutacin
Sinembargohubierasidodeseableescribir (setters o mutators en ingls),
p1.x = p1.x + p2.x sirven para cambiar las
ya que en este caso no se justifica usar los propiedades (privadas) de un
mtodosgetX()ysetX()yhacerencapsulacinde 41
datos.Nosepuedehacerporquexesprivada.
objeto.
Enestecasossejustifica Sinembargo,Python
crearambosmtodos: ofreceunasolucin
mselegante:

42
Dosobservacionesimportantes:
Wejustputthecodeline"self.x=x"inthe

__init__ method and the property method


xisusedtocheckthelimitsofthevalues.
We wrote "two" methods with the same

name and a different number of


parameters"defx(self)"and"defx(self,x)".
Esto se supone que no es posible, pero
con el uso del decorador, se permite la
sobrecargadefunciones. 43
En conclusin, la mejor
forma de acceder a los
atributos de una clase es
usando decoradores, en
casodesernecesario.

44
Losmtodostambinsepueden
hacerprivados
Mtodoprivado

45
Herencia
Another powerful feature of using classes and
objectsistheabilitytomakeuseofinheritance.It
ispossibletocreateaclassandinheritallofthe
attributesandmethodsofaparentclass.
Our program can create child classes that will
inheritalltheattributesandmethodsoftheparent
class.Thechildclassesmaythenaddfieldsand
methodsthatcorrespondtotheirneeds.

46
Herencia
A class can inherit attributes and behaviour
methods from another class, called the
superclass. A class which inherits from a
superclass is called a subclass, also called heir
classorchildclass.Superclassesaresometimes
calledancestorsaswell.Thereexistsahierarchy
relationship between classes. It's similar to
relationshipsorcategorizationsthatweknowfrom
reallife.

47
Herencia

Bikes,cars,busesandtrucksarevehicles.pickups,vans,sports
cars, convertibles and estate cars are all cars and bybeing cars
they are vehicles aswell. Wecouldimplementa vehicleclassin
Python, which might have methods like accelerate and brake.
Cars, Buses and Trucks and Bikes can be implemented as 48
subclasseswhichwillinheritthesemethodsfromvehicle.
Aqu el atributo nombre
seestheredando.

Observe que los


mtodos tambin se
heredan. En este caso,
el constructor se est
heredando.

Cuando la clase hija


define un mtodo con el
mismo nombre que la
clase padre, el mtodo
de la clase padre se
reemplazaporelmtodo
delaclasehija.
49
EnPython2sera:
super(Empleado, self).__init__(nompers)
Python3tambinsoportaesaconstruccin

Si se desea ejecutar
ambos constructores,
eldelaclasepadrey
el de la clase hija, la
clasehijadebellamar
explcitamente el
constructor de la
clasepadre.

Adicionalmente, se
est anteponiendo el
mtodo
Empleado.imprimir()
al mtodo
Persona.imprimir()
50
Otraformacomose
puedenllamarlos
mtodosdelaclasepadre
desdelaclasehija:

51
Sobrecargadefunciones
In the context of objectoriented programming,
overloading is the ability to define the same
method, with the same name but with a different
numberofargumentsandtypes.It'stheabilityof
onefunctiontoperformdifferenttasks,depending
on the number of parameters or the types of the
parameters.

http://www.pythoncourse.eu/python3_inheritance.php

52
Herenciamltiple

53
54
Enresumen,losprincipiosbsicos
delaPOOson:
Encapsulacin
Abstraccindedatos
Polimorfismo
Herencia
Sobrecargadeoperadores

55
Referencias
Wikipedia
http://www.programarcadegames.com/
http://www.pythoncourse.eu/python3_course.php
DocumentacindePython:
https://docs.python.org/3/tutorial/index.html
https://docs.python.org/3/
MarzalVar,Andrs;GraciaLuengo,Isabel;GarcaSevilla,
Pedro(2014).IntroduccinalaprogramacinconPython3.
Disponibleen:http://dx.doi.org/10.6035/Sapientia93

56

Das könnte Ihnen auch gefallen