<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://haypo.alwaysdata.net:443/wiki/skins/common/feed.css?63"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Conseils de programmation orientÃ©e objet - Historique des versions</title>
		<link>http://haypo.alwaysdata.net:443/wiki/index.php?title=Conseils_de_programmation_orient%C3%83%C2%A9e_objet&amp;action=history</link>
		<description>Historique pour cette page sur le wiki</description>
		<language>fr</language>
		<generator>MediaWiki 1.10.1</generator>
		<lastBuildDate>Thu, 30 Apr 2026 20:22:12 GMT</lastBuildDate>
		<item>
			<title>Haypo le 6 septembre 2005 à 00:52</title>
			<link>http://haypo.alwaysdata.net:443/wiki/index.php?title=Conseils_de_programmation_orient%C3%83%C2%A9e_objet&amp;diff=3719&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[CatÃ©gorie:Programmation]]&lt;br /&gt;
&lt;br /&gt;
[[Programmation|Retour Ã  la page programmation]]&lt;br /&gt;
&lt;br /&gt;
J'ai programmÃ© en C++, puis [[Python]] et un peu de [[Java]], pendant un bout de temps. On m'a souvent demandÃ© des conseils de programmation. Je me propose donc de les exposer ici.&lt;br /&gt;
&lt;br /&gt;
== Usage du mot-clÃ© const ==&lt;br /&gt;
&lt;br /&gt;
=== UtilitÃ© du mot-clÃ© const ===&lt;br /&gt;
&lt;br /&gt;
Le mot-clÃ© const est utile pour deux choses. On indique que la fonction ne va modifier un paramÃ¨tre/une classe, et qu'on peut donc utiliser cette fonction '''sans effet de bord'''. Ensuite, le mot-clÃ© const aide le compilateur Ã  optimiser le code.&lt;br /&gt;
&lt;br /&gt;
Le mot-clÃ© '''const''' peut servir Ã  diffÃ©rents endroits. Exemples :&lt;br /&gt;
  (1) void affiche('''const''' Objet x);&lt;br /&gt;
  (2) int Annuaire::litTaille() '''const''';&lt;br /&gt;
  (3) string Annuaire::litPrenom('''const''' string nom) '''const''';&lt;br /&gt;
&lt;br /&gt;
Dans le premier cas (1), on indique que l'argument d'une fonction est constant, qu'on ne va pas modifier cet argument dans la fonction.&lt;br /&gt;
&lt;br /&gt;
Dans le second cas (2), on indique que la mÃ©thode ne va pas toucher au contenu de la classe. C'est utile pour une mÃ©thode d'accÃ¨s en lecture Ã  une classe, ou une mÃ©thode qui ne fait qu'afficher un rÃ©sultat.&lt;br /&gt;
&lt;br /&gt;
Enfin, dans le troisiÃ¨me cas (3), on cumule les deux propriÃ©tÃ©s.&lt;br /&gt;
&lt;br /&gt;
=== Les dÃ©savantages du mot-clÃ© const ===&lt;br /&gt;
&lt;br /&gt;
Le soucis est que le mot-clÃ© const est &amp;quot;contagieux&amp;quot;. Lorsqu'on passe un objet en argument en indiquant qu'il est constant, seules ses mÃ©thodes constantes sont autorisÃ©es !&lt;br /&gt;
  class Personne { &lt;br /&gt;
    ... &lt;br /&gt;
    string litNom(); &lt;br /&gt;
    string litPrenom(); &lt;br /&gt;
    void affiche() '''const''';&lt;br /&gt;
  };&lt;br /&gt;
  void Personne::affiche() const&lt;br /&gt;
  {&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; litNom() &amp;lt;&amp;lt; &amp;quot; &amp;quot; &amp;lt;&amp;lt; litPrenom() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Il donc modifier la classe de cette maniÃ¨re :&lt;br /&gt;
  class Personne {&lt;br /&gt;
    ... &lt;br /&gt;
    string litNom() '''const''';&lt;br /&gt;
    string litPrenom() '''const''';&lt;br /&gt;
    void affiche() '''const''';&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
== Utiliser les rÃ©fÃ©rences (C++) ==&lt;br /&gt;
&lt;br /&gt;
=== Passer un variable en paramÃ¨tre par rÃ©fÃ©rence ===&lt;br /&gt;
&lt;br /&gt;
Le langage C++ permet de gÃªrer plus simplement les pointeurs que le langage C, grÃ¢ce Ã  l'utilisation des rÃ©fÃ©rences. Exemple :&lt;br /&gt;
  void calculeSomme_C (int a, int b, int *c) { *c = a + b; }&lt;br /&gt;
  void calculeSomme_CPP (int a, int b, int &amp;amp;c) { c = a + b; }&lt;br /&gt;
&lt;br /&gt;
Il est Ã©galement vivement conseillÃ© de passer les (gros) objets par rÃ©fÃ©rence, pour Ã©viter qu'ils soient copier. Imaginer un tableau de 1000 Ã©lÃ©ments de 10 Ko chaqun. Si on passe l'objet en argument par copier, il faudra copier 10 Mo Ã  chaque fois ! C'est trÃ¨s embÃªtant. Il suffit d'ajouter un &amp;quot;&amp;amp;&amp;quot; et c'est jouÃ© !&lt;br /&gt;
  double calculeMoyenne (ListeNote liste);&lt;br /&gt;
devient&lt;br /&gt;
  double calculeMoyenne (const ListeNote &amp;amp;liste);&lt;br /&gt;
&lt;br /&gt;
=== RÃ©fÃ©rence utilisÃ©e comme abrÃ©viation ===&lt;br /&gt;
&lt;br /&gt;
La version C++ est beaucoup plus lisible car on se passe de l'Ã©toile prÃ©cÃ©dent le paramÃ¨tre c. Mais, les rÃ©fÃ©rences peuvent Ã©galement servir Ã  abrÃ©ger un bout de code :&lt;br /&gt;
  void affichePersonne (const string nom)&lt;br /&gt;
  {&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; annuaire.cherchePersonne(nom).nom_complet&lt;br /&gt;
               &amp;lt;&amp;lt; &amp;quot; : &amp;quot;&lt;br /&gt;
               &amp;lt;&amp;lt; annuaire.cherchePersonne(nom).telephone&lt;br /&gt;
               &amp;lt;&amp;lt; &amp;quot; : &amp;quot;&lt;br /&gt;
               &amp;lt;&amp;lt; annuaire.cherchePersonne(nom).email&lt;br /&gt;
               &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  }&lt;br /&gt;
devient&lt;br /&gt;
  void affichePersonne (const string nom)&lt;br /&gt;
  {&lt;br /&gt;
     Personne &amp;amp;p = annuaire.cherchePersonne(nom);&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; p.nom_complet&lt;br /&gt;
               &amp;lt;&amp;lt; &amp;quot; : &amp;quot;&lt;br /&gt;
               &amp;lt;&amp;lt; p.telephone&lt;br /&gt;
               &amp;lt;&amp;lt; &amp;quot; : &amp;quot;&lt;br /&gt;
               &amp;lt;&amp;lt; p.email&lt;br /&gt;
               &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
La diffÃ©rence par rapport Ã  &amp;quot;Personne p = annuaire.cherchePersonne(nom);&amp;quot; est qu'on Ã©vite une copie. Imaginez qu'on connaisse le nom, prÃ©nom, email, tÃ©lÃ©phone, â€¦ d'une personne : et bien, il faudrait copier chaque information, ce qui est tout Ã  fait inutile.&lt;/div&gt;</description>
			<pubDate>Tue, 06 Sep 2005 00:52:03 GMT</pubDate>			<dc:creator>Haypo</dc:creator>			<comments>http://haypo.alwaysdata.net:443/wiki/Discuter:Conseils_de_programmation_orient%C3%83%C2%A9e_objet</comments>		</item>
	</channel>
</rss>