Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
FORUM MAC TUTORIEL MAC FAQ MAC LIVRES MAC OUTILS MAC BLOG MAC ÉVÈNEMENTS MAC 4D

Pierre Chatelier: De C++ à Objective-C

Date de publication : 8 Juillet 2007 , Date de mise à jour : 1 Septembre 2007

Par Pierre Chatelier (Pierre Chatelier)
 

Ce document est un guide de passage de C++ à Objective-C. Il existe plusieurs documentations soucieuses d'enseigner le modèle objet via Objective-C, mais aucune à ma connaissance n'est destinée aux codeurs expérimentés en C++, désirant se renseigner sur les concepts du langage pour les comparer à ce qu'ils connaissent déjà. Le langage Objective-C m'avait semblé au premier abord un obstacle plutôt qu'un tremplin à la programmation avec Cocoa (cf. section 1 page suivante) : il est si peu répandu que je ne comprenais pas son intérêt face à un C++ puissant, efficace et maîtrisé.
Il a donc fallu longtemps pour que je comprenne qu'il était au contraire un réel concurrent grâce à la richesse des concepts qu'il propose. Ce document ne se présente pas comme un didacticiel mais comme une référence de ces concepts. Il permettra ainsi, je l'espère, d'éviter qu'une mauvaise connaissance d'Objective-C conduise un développeur C++, soit à abandonner trop vite ce langage, soit à utiliser à mauvais escient ses outils habituels, produisant alors un code bâtard, inélégant et inefficace. Ce document ne se veut pas une référence complète, mais rapide. Pour une description approfondie d'un concept, mieux vaut consulter une documentation Objective-C spécifique.

               Version PDF (Miroir)



0. Historique

version 1.10
  • adaption en anglais par Aaron Vegh ;
  • réécriture de la section sur le clonage ;
  • ajout d'une section sur le IMP caching ;
  • précisions sur initialize ;
  • précisions sur Objective-C++ ;
  • correction des propos sur superclass ;
  • précisions sur les données « static »de classe ;
  • précisions sur les étiquettes des paramètres de méthodes ;
  • correction de coquilles sur les constructeurs virtuels ;
  • correction d'erreurs à propos de self et super ;
  • précisions sur Objective-C 2.0 ;
  • précisions sur les chaînes statiques ;
  • corrections de petites coquilles diverses.
version 1.9
  • changements mineurs.
version 1.8
  • précisions sur Objective-C 2.0 (ramasse-miettes, énumération rapide, properties) ;
  • précisions sur l'envoi d'un message à nil ;
  • précisions sur les cycles de retain ;
  • précisions sur les mutateurs et accesseurs en lecture ;
  • quelques reformulations et corrections typographiques.
version 1.7
  • corrections de fautes de frappe ([release chaine] au lieu de [chaine release]).
version 1.6
  • corrections de fautes de frappe.
version 1.5
  • un grand merci à Jean-Daniel Dupas pour ses corrections !
  • correction : (partie 5.2.3) en Objective-C, l'attribut par défaut n'est pas private mais protected ;
  • correction : (partie 5.3.5) @selector() est évalué à la compilation et ne pénalise pas les performances ;
  • correction : (partie 5.4.2) un retain est plus logique qu'un copy ;
  • correction : (parties 6.4.2 et 6.6) on ne peut pas utiliser catégorie et super-classe en même temps ;
  • correction : (partie 7.1.1) la donnée d'instance isa est initialisée dans alloc et non dans init ;
  • précisions sur l'inlining dans la partie 12.2 ;
  • les méthodes cString et initWithCString sont devenues obsolètes avec MacOS 10.4, il faut maintenant utiliser les équivalents UTF8 ;
  • précisions sur self = [super init] dans la partie 7.1.3 ; les différents code d'exemple utilisant self = [super init] ; if (self){...} ; ont été corrigés en conséquence ;
  • ajout de la partie 7.1.4 intitulée « Échec de l'initialisation » ;
  • légère remise en page (séparation des sections par un saut de page).
version 1.4
  • Précisions sur l'absence de NSList, NSQueue ;
  • précisions sur les itérateurs ;
  • corrections typographiques.
version 1.3
  • Ajout d'une partie sur les arguments anonymes (ou muets) ;
  • ajout d'une partie sur les données de classe ;
  • ajout d'une partie sur les accesseurs en lecture ;
  • légère modification du nom de la section traitant des mutateurs ;
  • précision sur la possibilité de nommer une méthode comme une donnée d'instance ;
  • ajout de « méthodes virtuelles pures » dans l'index.
version 1.2
  • La partie sur les mutateurs était incorrecte ! Elle est maintenant conforme au Cocoa programming for MacOS X [4] ;
  • modification de la section « Appel de méthodes » en « Différenciation entre fonctions et méthodes » ; contenu légèrement modifié également ;
  • correction de quelques erreurs typographiques et de fautes d'orthographe.
version 1.1
  • Ajout de la présente section ;
  • les renvois du document sont maintenant des hyperliens pour naviguer plus rapidement ;
  • meilleure gestion des accents dans les lecteurs PDF;
  • explications plus complètes sur la copie (clonage) ;
  • plus de détails sur les objets mutables ;
  • référence au « Cocoa Programming for MacOS X » ;
  • référence à SGI ;
  • quelques petits remaniements de phrases.

1. Table des Matières

Table des matières
Introduction
1 Objective-C et Cocoa
2 Bref historique d'Objective-C
3 Généralités sur la syntaxe
  3.1 Mots-clefs
  3.2 Commentaires
  3.3 Mélange code/déclarations
  3.4 Nouveaux types et valeurs
    3.4.1 BOOL, YES, NO
    3.4.2 nil, Nil et id
    3.4.3 SEL
  3.5 Nom des classes : pourquoi NS ?
  3.6 Différenciation entre fonctions et méthodes
4 Organisation du code source : fichiers .h, fichiers .m et inclusion
5 Classes et objets
  5.1 Classe racine, type id, valeurs nil et Nil
  5.2 Déclaration de classes
    5.2.1 Attributs et méthodes
    5.2.2 Déclarations forward : @class, @protocol
    5.2.3 public, private, protected
    5.2.4 Attributs static
  5.3 Méthodes
    5.3.1 Prototype et appel, méthodes d'instance, méthodes de classe
    5.3.2 this, self et super
    5.3.3 Accès aux données d'instance de son objet déclencheur
    5.3.4 Identifiant et signature du prototype, surcharge
    5.3.5 Pointeur de méthode : Sélecteur
    5.3.6 Paramètres par défaut
    5.3.7 Nombre d'arguments variable
    5.3.8 Arguments muets
    5.3.9 Modificateurs de prototype (const, static, virtual, « = 0 », friend, throw)
  5.4 Messages et transmission
    5.4.1 Envoi d'un message à nil
    5.4.2 Délégation d'un message vers un objet inconnu
    5.4.3 Forwarding : gestion d'un message inconnu
    5.4.4 Downcasting
6 Héritage
  6.1 Héritage simple
  6.2 Héritage multiple
  6.3 Virtualité
    6.3.1 Méthodes virtuelles
    6.3.2 Redéfinition silencieuse des méthodes virtuelles
    6.3.3 Héritage virtuel
  6.4 Protocoles
    6.4.1 Protocole formel
    6.4.2 Protocole informel
    6.4.3 Qualificateurs pour messages entre objets distants
  6.5 Catégories de classe
  6.6 Utilisation conjointe de protocoles, catégories, dérivation
7 Instanciation
  7.1 Constructeurs, initialisateurs
    7.1.1 Distinction entre allocation et initialisation
    7.1.2 Utilisation de alloc et init
    7.1.3 Exemple d'initialisateur correct
    7.1.4 Échec de l'initialisation
    7.1.5 Constructeur par défaut : initialisateur désigné
    7.1.6 Listes d'initialisation et valeur par défaut des données d'instance
    7.1.7 Constructeur virtuel
    7.1.8 Constructeur de classe
  7.2 Destructeurs
  7.3 Opérateurs de copie
    7.3.1 Clonage classique, copy et copyWithZone
    7.3.2 NSCopyObject()
    7.3.3 Pseudo-clonage, mutabilité, mutableCopy et mutableCopyWithZone
8 Gestion mémoire
  8.1 new et delete
  8.2 Compteur de références
  8.3 alloc, copy, mutableCopy, retain, release
  8.4 autorelease
    8.4.1 Indispensable autorelease
    8.4.2 Bassin d'autorelease
    8.4.3 Utilisation de plusieurs bassins d'autorelease
    8.4.4 Prudence avec autorelease
    8.4.5 autorelease et retain
    8.4.6 Constructeurs de commodité, constructeur virtuel
    8.4.7 Accesseurs en écriture : Mutateurs
    8.4.8 Accesseurs en lecture
  8.5 Cycles de retain
  8.6 Ramasse-miettes
9 Exceptions
10 Chaînes de caractères en Objective-C
  10.1 Seuls objets statiques possibles d'Objective-C
  10.2 NSString et les encodages
  10.3 Description d'un objet, extension de format %@, d'une NSString à une chaîne C
11 STL et Cocoa
  11.1 Conteneurs
  11.2 Itérateurs
    11.2.1 Énumération classique
    11.2.2 Énumération rapide
  11.3 Foncteurs (objets-fonctions)
    11.3.1 Utilisation du selector
    11.3.2 IMP caching
  11.4 Algorithmes
12 Fonctionnalités propres au C++
  12.1 Références
  12.2 Inlining
  12.3 Templates
  12.4 Surcharge d'opérateurs
  12.5 Friends
  12.6 Méthodes const
  12.7 Liste d'initialisation dans le constructeur
13 RTTI (Run-Time Type Information)
  13.1 class, superClass, isMemberOfClass, isKindOfClass
  13.2 conformsToProtocol
  13.3 respondsToSelector, instancesRespondToSelector
  13.4 Typage fort ou typage faible via id
14 Objective-C++
15 Objective-C 2.0
Conclusion
Références
Révisions du document
Index


2. Téléchargement

Télécharger le tutoriel fr De C++ à Objective-C au format PDF (1429Ko) (fr mirroir HTTP)

Pour lire les documents au format PDF, vous pouvez utiliser le logiciel fr Adobe Acrobat Reader.



               Version PDF (Miroir)

Valid XHTML 1.1!Valid CSS!

Copyright © 2005, 2006, 2007 Pierre Chatelier. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Responsable bénévole de la rubrique Mac : La rédaction Mac - Contacter par EMail :
Vos questions techniques : forum d'entraide Mac - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.