Il y a plus de 10 ans déjà, NeXT donnait à Objective-C (un langage qui enrichit le C d'une couche orientée objet) ses titres de noblesse en l'adoptant pour la réalisation du système d'exploitation NEXTSTEP. Objective-C est depuis devenu le langage de référence du système Mac OS X et celui le plus souvent utilisé dans l'environnement de développement GNUstep. Il est donc naturellement également utilisé pour le développement d'applications pour les incontournables produits Apple que sont l'iPhone et l'iPod Touch. Les participants à cette formation découvriront son élégance mais aussi et surtout sa puissance.
Objectifs
Savoir développer efficacement dans ce langage et vous familiariser, si besoin, avec l'environnement de développement sous Mac
Être capable de développer des applications textes ou graphiques pour Cocoa/Mac OS X ou GNUstep/UNIX.
Public concerné
Programmeur ayant une première expérience
Pré-requis
Connaître au moins un langage de programmation
Plan détaillé
1ère partie : Introduction
Introduction
Pourquoi Objective C ?
L'environnement de développement
2ème partie : Programmation Orientée Objet (POO)
Interface et implémentation : Le modèle objet
La métaphore de l'envoi de message
Classes
Modularité, réusabilité
Mécanismes d'abstraction
Encapsulation, polymorphisme, héritage
Hiérarchies des classes, définition de sous-classes
Usages
Dynamisme, typage dynamique
Résolution de lien dynamique
Chargement dynamique
Structuration des programmes
Points de connexions
Connexions intrinsèques et extrinsèques
Activation du réseau d'objets
Aggrégation et décomposition
Modèles et Frameworks
Structurer la tâche de programmation
Collaboration
Organiser les projets orientés objet
Concevoir à une grande échelle
Distinguer interface et implémentation
Modulariser le travail
Conserver l'interface simple
Réutiliser le code validé
3ème partie : le langage Objective C
Objets Objective C
Le type générique id
Typage dynamique
Envoi de message
Accès aux variables d'instance du receveur
Polymorphisme
Résolution de lien dynamique
Classes
Héritage des variables d'instance, des méthodes
Surcharger une méthode
Classes abstraites
Types de classe
Typage statique
Détermination du type à l'exécution
Objets de type classe
Instanciation
Variables et objets de type classe (variables de classe)
Initialiser un objet de type classe
Méthodes de la classe racine
Apparition des noms des classes dans le code source
Définition d'une classe
L'interface
Importer une interface
Mention d'autres classes
Le rôle de l'interface
L'implémentation
Références aux variables d'instance
Portée des variables d'instance
Comment les messages fonctionnent
Sélecteurs
Méthodes et sélecteurs
Types des arguments et de la valeur de retour d'une méthode
Variation du message durant l'exécution
Paradigme Cible-Action (Target-Action)
Éviter les erreurs relatives aux envois de message
Arguments cachés : messages adressés à self et super
Utilisation de super
Redéfinition de self
Extension de classes
Catégories - Ajout de méthodes à une classe existante
Ajouter à une classe
Comment sont employées les catégories
Catégories de la classe racine
Protocoles - Déclaration d'interfaces que d'autres implémenteront
À quels moments utiliser les protocoles
Valider les comportements statiques
Typage statique
Détermination de type
Types des arguments et de la valeur de retour
Obtention de l'adresse d'une méthode
Obtention de l'adresse de la structure de données d'un objet
4ème partie : l'environnement d'exécution (Runtime) Objective C
Gestion de la mémoire
Allocation et initialisation des objets
Objet retourné
Arguments
Coordonner les classes
Méthode d'initialisation désignée
Combiner allocation et initialisation
Rétention d'objets
Gestion des références cycliques
Libération
Libération d'objets partagés
Libération de variables d'instance
Marquer les objets pour une libération retardée
Propriétaire d'objet
Suivi de message (forwarding)
Suivi et héritage multiple
Objet substitut
Suivi et héritage
Chargement dynamique : envoi de message distant (remote messaging)
Objets distribués
Messages synchrones et asynchrones
Arguments de types pointeurs
Mandataires (proxies) et copies
Codage des types
Fonctions et structures de données de l'environnement d'exécution (Runtime) : aspects annexes