# Exercice Tranche + travail de recherche
###### tags: `pratique`
# exercice Tranche
```python
class Tranche:
#constructeur
def __init__(self,tab,borne1,borne2):
if isinstance(tab,list):
self.tab=tab
else:
self.tab=tab.tranche
self.borne1=borne1
self.tranche=[]
for i in range(borne1,borne2):
self.tranche+=[self.tab[i]]
#méthodes
def __len__(self):
return len(self.tranche)
def __getitem__(self,i):
return self.tranche[i]
def __setitem__(self,i,item):
self.tranche[i]=item
self.tab[i+self.borne1]=item
# Programme principale
t=[9,56,12,87,51,5,75,21,52,445,2,0]
s=Tranche(t,5,10)
print("Tranche du tableau:",s.tranche)
print("Longeur de la tranche:",len(s))
print("On vérifie si l'alliassage est correct")
s[0]=598
print(s.tranche)
print(t)
u=Tranche(s,0,4)
print("On obtient une tranche d'une autre tranche t",u.tranche)
```
# Travail de recherche
## Partie 1
#### Qu’est-ce que l’héritage en POO ?
En programmation orientée objet, l’héritage est un mécanisme qui permet, lors de la déclaration d’une nouvelle classe, d'y inclure les caractéristiques d’une autre classe.
#### Comment représente-t-on l’hérédité en UML ?

#### Schématiser les liens d’hérédite relatifs aux classes décrites dans les lignes qui suivent.
On souhaite représenter, en UML, deux classes permettant de décrire des tigres et des chats.
Pour pouvoir représenter ces classes, posez-vous les questions suivantes :
* doit-on se contenter de représenter les classes tigre et chat ?
* quel lien peut-on établir entre ces deux entités ?

#### Comment déclarer l’hérédité en Python ?
Pour déclarer l'hérédité sur python il faut dans la création de la classe mettre en parametre la classe mère.
#### En utilisant les informations recueillies précédemment, implémenter votre diagramme d’objet.
```=python
class Felin:
def __init__(self,nom, taille, pelage, age, habitat):
self.nom=nom
self.taille=taille
self.pelage=pelage
self.age=age
self.habitat=habitat
def chasser(self):
pass
def courir(self):
pass
def ronronner(self):
pass
class Chat(Felin):
def __init__(self, domestique):
self.domestique=domestique
def ronronner(self):
pass
class Tigre(Felin):
def __init__(self, sauvage):
self.sauvage=sauvage
def rugir(self):
pass
#programme principal
saphir=Chat()
print(saphir.nom)
print(saphir.taille)
```
# Partie 2
#### Qu’est-ce qu’un mutateur ?
Ajoutez dans votre réponse la traduction en anglais du terme “mutateur”
les mutateurs (en anglais mutator) modifient l'état d'un objet, donc les valeurs de certains de ses attributs.
#### Qu’est-ce qu’un accesseur ?
Ajoutez dans votre réponse la traduction en anglais du terme “accesseur”
les accesseurs (en anglais accessor) fournissent des informations relatives à l'état d'un objet, c'est-à-dire aux valeurs de certains de ses attributs (généralement privés) sans les modifier
#### Quelle est la convention d’écriture utilisée pour définir les accesseurs ?
La convention d'écriture utilisée pour définir les accesseurs est getattr()
#### Quelle est la convention d’écriture utilisée pour définir les mutateurs ?
La convention d'écriture utilisée pour définir les mutateurs est setattr() (remplacer) ou delattr() pour supprimer
#### Au sein des classes implémentées précédemment, mettez en place les accesseurs et les mutateurs.
```=python
class Felin:
def __init__(self,nom, taille, pelage, age, habitat):
self.nom=nom
self.taille=taille
self.pelage=pelage
self.age=age
self.habitat=habitat
def chasser(self):
pass
def courir(self):
pass
def ronronner(self):
pass
class Chat(Felin):
def __init__(self, domestique):
self.domestique=domestique
def ronronner(self):
pass
class Tigre(Felin):
def __init__(self, sauvage):
self.sauvage=sauvage
def rugir(self):
pass
#programme principal
saphir=Chat()
print(saphir.nom)
print(saphir.taille)
#mutateur/seter
def setnom(self, nv_nom):
self.nom = nv_nom
def settaille(self,nv_taille):
self.taille+=nv_taille
```