[WikiItic] [TitleIndex] [WordIndex

1. Teoria 1 (17/02/2011) - Classes, atributs i mètodes

1.1. Temari


1.2. Xuletari


1.3. Exercicis Resolts

Exercici 1.1 Cerqueu a la wikipedia el terme anglès programming paradigm. Estudieu-ne el contingut i resumiu en dos o tres paràgrafs que significa aquest concepte.

Paradigma de programació

Un paradigma és una forma de representar i manipular el coneixement.

Representa un enfocament particular o filosofia per a la construcció del programari. No és millor un que un altre, sinó que cada un té avantatges i desavantatges. També hi ha situacions on un paradigma resulta més apropiat que un altre.

Alguns exemples de paradigmes de programació:

Nota: La representació orientada a objectes millora l'estructura de les dades i per això s'ha aplicat a diferents paradigmes.

Si bé es pot seleccionar la forma pura d'aquests paradigmes al moment de programar, en la pràctica és habitual que es barregin. Així, llenguatges com C++, Delphi ó Visual Basic combinen el paradigma imperatiu amb l'orientat a objectes.

Un altre exemple: Llenguatges com Scheme o Prolog, paradigma funcional i lògic respectivament, compten amb estructures repetitives. Aquestes són més pròpies del paradigma imperatiu que a la forma pura d'aquells.


Exercici 1.2 Definiu la classe Semaf que representa un semàfor de carrer, amb els tres colors habituals. Quants atributs hauria de tenir? Definiu un mètode per inicialitzar instàncies d'aquesta classe que permeti definir el color en que es troba el semàfor just després de crear-lo.

>>> class semaf(object):
            def __init__(self, Verd, Taronja, Vermell):
                    self.verd=Verd
                    self.taronja=Taronja
                    self.vermell=Vermell

semaf1.semaf(1,0,0)
semaf1.verd
1
semaf1.taronja
0

SOLUCIÓ SEBAS:

>>> def __init__(self,c):
           d={"vermell":0, "verd":1,"groc":2}
           self.c=d[c]


Exercici 1.3 Definiu la classe Vector2d que representa un vector en el pla. Doteu la classe d'uun constructor i també d'un mètode que retorni el mòdul del vector en qüestió.

>>> class vector2d(object):
        def __init__(self,x,y):
                self.x=x; self.y=y
        def mod(self):
                return math.sqrt(self.x*self.x+self.y*self.y)
                # prèviament, cal importar la llibreria math.
    
>>> v1=vector2d(3.0,4.0)
>>> v1.x; v1.y; v1.mod()
    3.0
    4.0 
    5.0

SOLUCIÓ SEBAS:

>>> def vector2d(object):
        def __init__(self, m , a):
                self.m=m
                self.a=a
        def modul(self):
                return self.m


Exercici 1.4 Definiu la classe Fracció. Creeu un constructor o inicialitzador que instancii un objecte d'aquesta classe donant el numerador i el denominador. Afegiu-hi un mètode que permeti sumar una fracció amb una altra.

>>> class Fracc(object):
        def __init__(self,num,den):
            self.n=num; self.d=den

        def suma(self,f):
            s_num=self.n*f.d+f.n*self.d
            s_den=self.d*f.d
            resultat=fracc(s_num,s_den)
            return resultat.n,resultat.d

Alternativa:

>>> class fraccio(object):
    def __init__(self,n,d):
        self.d= d ; self.n= n  
        
    def sum(self,f2):

        return fraccio(self.n* f2.d + f2.n *self.d , self.d * f2.d) 

    def tostring(self):
        return '%s / %s' %(self.n,self.d)

#Perqué quedés la cosa una mica més decent, potser caldria implementar un petit mètode que simplifiqués la fracció.


Exercici 1.5 Dissenyeu la classe Byte. Un byte és una paraula de 8 bits. Representeu un byte com una tupla de 8 enters, que prendran sempre valor 0 o 1. Definiu un mètode constructor i també un altre mètode que retorna el valor enter corresponent al byte. Aquesta classe hauria de superar el següent doctest:

>>> x = Byte((0,0,0,0,1,0,0,1)) >>> print x.value() 9

SOLUCIÓ SEBAS:

>>> class Byte(object):
        def __init__(self, b):   # b es una tupla
                self.b=b
        def valor(self):   # prover de fer-ho amb una línia
                v=0; p=1
                for d in self.b[::-1]:
                        v+=d*p
                        p*=2
                return v

_Exercici 1.6

class Codif(object):
    def __init__(self,c1,c2,c3):
     
        self.c1=c1 ; self.c2=c2 ; self.c3=c3 

    def value(self):
        
        return str(self.c1)+str(self.c2)+str(10**self.c3)[1:]
        
    def colors(self):
        d={0:"negre",1:"marro",2:"vermell",3:"troja",4:"groc",5:"verd",6:"blau",7:"lila",8:"gris",9:"blanc"}

        return d[self.c1],d[self.c2],d[self.c3]
        
        


CategoryApunts


2023-07-03 11:46