# -*- encoding:utf8 -*-

# Définition des classes

class Point(object):
    """ Définition d'un point géométrique """
    
    def __init__(self, coord_x=0, coord_y=0):       # la méthode constructeur
        """
        Point(float coord_x, float coord_y) --> Obj
        Retourne un objet de la classe Point dont les coordonnées sont <coord_x> et <coord_y>
        """
        self.x =coord_x                             # initialise les attributs d'instance
        self.y =coord_y                             # à coord_x et coord_y

    def affiche_point(self):
        """
        affiche_point() --> None
        Affiche les coordonnées du point sous la forme (x;y)
        """
        print("({};{})".format(self.x, self.y))


class Rectangle(object):
    """Définition d'un rectangle"""
    
    def __init__(self, coin, largeur, hauteur):
        """Rectangle(Point coin, float largeur, float hauteur) --> Obj
        Retourne un objet de la classe Rectangle
        """
        self.coin = coin
        self.largeur =largeur
        self.hauteur = hauteur

    def trouveCentre(self):
        """
        trouveCentre() --> Point
        Retourne les coordonnées du centre du rectangle sous forme d'un objet de la classe Point
        """
        
        xc = self.coin.x + self.largeur/2
        yc = self.coin.y + self.hauteur/2
        return Point(xc, yc)

class Carre(Rectangle):
    """Définition d'un carré horizontal"""

    def __init__(self, coin, cote):
        Rectangle.__init__(self, coin, cote, cote)
        self.cote = cote

    def surface(self):
        return self.cote**2

# Programme de test

if __name__ == "__main__":

    # Définition d'un rectangle:
    csgR = Point(40, 30)
    boiteR = Rectangle(csgR, 100, 50)

    # Définition d'un carré:
    csgC = Point(10, 25)
    boiteC = Carre(csgC, 40)

    # Milieu du rectangle et du carré:
    cR = boiteR.trouveCentre()
    print("Le milieu du rectangle est:")
    cR.affiche_point()
    cC = boiteC.trouveCentre()
    print("Le milieu du carré est:")
    cC.affiche_point()

    # Surface du carré et du rectangle:
    print("Surface du carré :", boiteC.surface())
    try:
        print("Surface du rectangle :", boiteR.surface())
    except:
        print("Il n'est pas possible de calculer la surface du rectangle.")




        
