Quelques raccourcis :
Ceci est un petit site de support pour le cours 420-KBB-LG – Programmation orientée objet avancée.
Vous trouverez aussi des liens sur divers langages (dont C#, notre outil de prédilection dans ce cours) un peu partout dans http://h-deb.ca/. Portez une attention particulière à ../../../Sujets/Divers--cdiese/index.html.
Les diverses sections de cette page (en fonction desquelles vous trouverez quelques liens dans l'encadré à droite) vous mèneront elles-aussi sur des pistes qui vous permettront d'explorer un peu plus par vous-mêmes, de valider vos acquis et d'enrichir votre apprentissage.
![]() |
Cliquez sur cette cible pour le plan de cours, sous forme électronique |
![]() |
Je corrige les programmes en appliquant des codes de correction. Vous trouverez ici la liste des codes les plus fréquents. |
![]() |
Ma stratégie de correction en tant que telle (pour le code, à tout le moins) est résumée ici. |
![]() |
Cliquez sur cette cible pour les normes appliquées dans ce cours, en ce qui a trait au pseudocode |
![]() |
Quelques trucs pour demander de l'aide plus efficacement |
Puisque nous serons en quelque sorte laboratoire à la fois pour les séances théoriques et les séances de laboratoire, j'ai fait le choix de construire le cours sous forme de 30 séances (de S00 à S29, ou plutôt à S28 car les jours fériés introduisent du chaos dans ma planification) plutôt que sous forme de 15 séances théoriques et 15 séances de laboratoire. Le dosage prévu de temps en théorie et de temps en laboratoire (soit environ moitié-moitié) devrait être respecté.
Date | Séance | Détails |
---|---|---|
25 et 26 août |
Au menu :
Si vous souhaitez le code du programme principal à partir duquel vous devrez démarrer, vous pouvez le prendre du fichier PDF ou encore le prendre ci-dessous (parfois, copier / coller d'un PDF...) :
Après avoir pris un peu de temps pour se « chamailler » avec ce petit défi de remise en forme, je vous ai proposé un peu de code pour vous aider à redémarrer vos instincts de programmeuse et de programmeur. L'accent a été mis sur l'écriture de code simple :
Le code produit en classe suit : Program.cs
OutilsTexte.cs
Algos.cs
Orque.cs
|
|
28 et 29 août |
Au menu :
À titre de référence, le code d'aujourd'hui est à peu près le suivant. Ce code est perfectible; nous ferons bien mieux plus tard dans la session. Je vous laisse le soin d'écrire le programme principal : Soldat.cs
Orque.cs
En espérant que cela vous soit utile! Nous avons aussi discuté sommairement du clonage. À titre de référence, le code produit lors de cette séance pour démontrer le clonage était :
En fin de séance, j'ai fait une petite activité dirigée d'un système à deux composants (code client, qui était une application console, et code serveur, qui était une bibliothèque de classes – une DLL). Le code auquel nous en sommes arrivés pour le client était le suivant (j'ai pris quelques libertés pour vous divertir) :
Le code auquel nous en sommes arrivés pour le serveur était le suivant (encore une fois avec quelques libertés) :
Nous avons ensuite survolé les consignes du TP00. Si votre serveur pour le TP00 fonctionne correctement, le programme de test suivant...
... devrait donner un affichage comme le suivant (il peut y avoir certaines différences dans les cas « partagé » et « aléatoire », mais il y a des limites à ces différences – le test utilise un germe choisi – alors consultez votre chic prof si vous avez des doutes) :
|
|
1 sept. |
s/o |
Fête du travail (jour férié) |
2 sept. |
? |
La Fête du travail crée du chaos dans mon horaire alors on se limitera à travailler sur le TP00 pour éviter que la synchronisation ne se brise entre mes trois groupes. |
4 et 5 sept. |
Au menu :
|
|
8 et 9 sept. |
Au menu :
|
|
11 et 12 sept. |
Au menu :
|
|
15 et 16 sept. |
Au menu :
|
|
18 et 19 sept. |
Au menu :
|
|
22 et 23 sept. |
Au menu :
|
|
25 et 26 sept. |
Au menu :
|
|
29 et 30 sept. |
Au menu :
|
|
2 et 3 oct. |
Au menu :
|
|
6 et 7 oct. |
Au menu :
|
|
9 et 10 oct. |
s/o |
Journée pédagogique (9 oct.) et journées de mise à niveau (10 oct.). Cours suspendus |
13 oct. |
s/o |
Action de grâce (jour férié) |
14 oct. |
s/o |
Journée de mise à niveau |
16 et 17 oct. |
Au menu :
|
|
20 et 21 oct. |
Au menu :
|
|
23 et 24 oct. |
Au menu :
|
|
27 et 28 oct. |
Au menu :
|
|
30 et 31 oct. |
Au menu :
Joyeuse Halloween! |
|
3 et 4 nov. |
Au menu :
|
|
6 et 7 nov. |
Au menu :
|
|
10 et 11 nov. |
Au menu :
|
|
13 et 14 nov. |
Au menu :
|
|
17 et 18 nov. |
Au menu :
|
|
20 et 21 nov. |
Au menu :
|
|
24 et 25 nov. |
Au menu :
|
|
27 et 28 nov. |
Au menu :
|
|
1 et 2 déc. |
Au menu :
|
|
4 et 5 déc. |
Au menu :
|
|
8 et 9 déc. |
Au menu :
|
|
10 et 11 déc. |
Au menu :
Note : techniquement, le dernier jour de classe est le lundi 15 décembre, mais dû à l'ajustement fait pour compenser le désordre causé par la Fête du travail, je ne tiendrai pas de séance en classe ce jour-là. Je serai toutefois disponible pour vous (modalités à définir entre vous et moi) |
Vous trouverez ici quelques documents, la plupart petits, qui peuvent vous donner un petit coup de pouce occasionnel.
![]() |
Comment accéder à du code .NET à partir d'un client C++ natif. |
Vous trouverez aussi des exemples de code C# dans la section Divers – C# du site, mais notez que je n'ai pas nécessairement harmonisé ces exemples (écrits pour des cours plus avancés, sous forme de survols) aux standards de programmation appliqués dans le présent cours. À lire avec prudence et discrimination, donc.
Les consignes des travaux pratiques suivent.
Consignes | Détails supplémentaires | À remettre... |
---|---|---|
s/o |
||
Code de test proposé à la séance S01 |
Vendredi le 6 septembre 2024 à 23 h 59 Important : |
|
Vendredi le 11 octobre à 23 h 59 Un exemple d'exécution serait wallyd.mp4 (merci à Marc Beaulne d'avoir préparé cela!) Le code du programme principal imposé est le suivant (vous pouvez ajouter des using et c'est tout) :
Le code des fonctions fournies par vos chics profs pour la classe Surface est :
Le code fourni pour la classe PipelineAffichage est :
|
||
Vendredi le 22 novembre à 23 h 59 Note : l'énoncé du TP02 est essentiellement correct, mais il vous est offert « sous réserve » car il se peut qu'il y ait des changements mineurs (surtout de la clarification) au cours des prochains jours. Le code du programme principal imposé est le suivant (vous pouvez ajouter des using et c'est tout) :
À noter :
Si vous avez eu de la difficulté avec le TP01, vous trouverez une implémentation fonctionnelle sur TP01-Wallyd.zip mais notez que vous n'avez absolument aucune obligation de l'utiliser : vous pouvez utiliser, comme base de travail, votre propre TP01, ou la version proposée par vos chics profs, ou encore un savant hybride des deux... L'important est que vous compreniez ce que vous faites! Important : je sais que plusieurs d'entre vous utilisez les tabulations par défaut de Visual Studio, qui correspondent à quatre espaces. Ça ne me dérange pas, mais personnellement ça m'agace alors j'utilise une indentation à trois espaces. Quand les cours se donnaient sur les postes du Collège, nous les faisions préparer en conséquence! Si vous utilisez mes sources à titre de point de départ, assurez-vous que les fichiers seront correctement indentés (Édition → Avancé → Mettre le document en forme) avant de commencer à programmer, sinon le nouveau code sera indenté de quatre espaces, le code existant sera indenté de trois espaces, et le tout sera difficile à comprendre. Vous ne voudriez pas perdre des points dû à une indentation incorrecte, n'est-ce pas? |
||
Vendredi le 6 décembre à 23 h 59 Le code du programme principal imposé mais incomplet est le suivant :
|
||
PFI |
Solutionnaire de la classe Messagerie proposée à la séance S17 :
using System;
using System.Collections.Generic;
namespace ActivitéArdoise
{
class HauteurInvalideException : Exception { }
class Messagerie : IObservateurArdoise
{
Dictionary<string, List<string>> Messages { get; } = new();
Dictionary<string, ConsoleColor> Couleurs { get; } = new();
static readonly ConsoleColor[] couleurs =
{
ConsoleColor.Red, ConsoleColor.Green, ConsoleColor.Blue,
ConsoleColor.Yellow, ConsoleColor.Cyan, ConsoleColor.Magenta
};
int Hauteur { get; init; }
public Messagerie(int hauteur)
{
if (hauteur <= 1) throw new HauteurInvalideException();
Hauteur = hauteur;
}
public void Nouveauté(string qui, string quoi)
{
lock (this)
{
if (Messages.ContainsKey(qui))
{
Messages[qui].Add(quoi);
if (Messages[qui].Count > Hauteur)
Messages[qui].RemoveAt(0);
}
else
{
Messages.Add(qui, new());
Couleurs.Add(qui, couleurs[Messages.Count % couleurs.Length]);
}
}
}
public void Afficher()
{
int[] largeurs;
string[] noms;
List<string> [] messages;
lock (this)
{
largeurs = new int[Messages.Count];
noms = new string[Messages.Count];
messages = new List<string>[Messages.Count];
int i = 0;
foreach (var (qui, msgs) in Messages)
{
noms[i] = qui;
largeurs[i] = Algos.Cumuler(
msgs, (cur, s) => Math.Max(cur, s.Length), noms[i].Length
);
messages[i] = new(msgs);
++i;
}
}
// titres
Console.Clear();
for (int i = 0; i != largeurs.Length; ++i)
Console.Write(noms[i].PadRight(largeurs[i]));
Console.WriteLine();
// messages
for (int j = 0; j != Hauteur; ++j)
{
for (int i = 0; i != largeurs.Length; ++i)
{
string nom = noms[i];
if (j < messages[i].Count)
{
ConsoleColor pré = Console.ForegroundColor;
Console.ForegroundColor = Couleurs[nom];
Console.Write(messages[i][j].PadRight(largeurs[i]));
Console.ForegroundColor = pré;
}
else
Console.Write(new string(' ', largeurs[i]));
}
Console.WriteLine();
}
}
}
}
En espérant que ça vous aide à organiser vos idées!