Baccalauréat en informatique
7833
Baccalauréat ès sciences appliquées (B. Sc. A. ) | 90 crédits | Version : 2023-3
819 376-5011 poste 3802
Transforme le monde en développant des technologies innovantes
Démarque-toi auprès des grandes entreprises avec un BAC axé sur la pratique
En bref
Le baccalauréat en informatique te prépare à une carrière prometteuse. Le programme est axé sur la conception et la production de logiciels, mais permet de te spécialiser dans des domaines technologiques essentiels. Le rôle de l’informaticienne ou de l’informaticien est indispensable dans un monde en constante évolution. Ses compétences en programmation, en analyse de données, en sécurité informatique et en intelligence artificielle, permettent de résoudre des problèmes techniques et d’améliorer l’efficacité des processus informatiques.
Grâce à une formation orientée sur la pratique, tu pourras apprendre à produire et analyser des logiciels, des applications Web et mobiles, en plus de te familiariser avec des sujets plus avancés en graphisme, cybersécurité, infonuagique, traitement d’image et architectures réparties.
Le baccalauréat en informatique t’offre 2 cheminements :
- Cheminement régulier (2 stages obligatoires)
- Cheminement DUAL *unique au Québec*(2 stages obligatoires et 4 cours en entreprise au cours de ta 3e année)
Laboratoires et outils avancés à ta disposition
Le Département de mathématiques et d'informatique dispose de 4 laboratoires à la fine pointe et accessibles en tout temps. Tu pourras installer des logiciels serveurs et expérimenter des sujets avancés sur la programmation réseau, sur les systèmes d'exploitation et sur plusieurs domaines d'applications.
Tu pourras travailler avec les outils modernes de programmation et aux progiciels actuels sur micro-ordinateurs : les langages de programmation C, C++, C#, Java, les systèmes d'exploitation Windows, UNIX et Linux, Android et IOS, ainsi qu’une variété d'environnements de développement intégrés (IDE) et d’appareils mobiles.
PROFILS
Choisis ton cheminement (régulier ou DUAL) et spécialise-toi grâce aux 4 profils :
Développement de logiciels : construis des composants réutilisables en t'appuyant sur des bibliothèques existantes, étudie les langages de programmation orientés objet et utilise des environnements de développement modernes pour de grands projets logiciels.
Développement d’applications Web et mobiles : étudie le cycle de développement d'applications mobiles et le développement d'applications natives impliquant des notions d'architecture multi-tiers, de connectivité réseau.
Sciences des données : comprends, modélise et manipule les données de masse à l’aide des nouvelles technologies et de l’apprentissage automatique.
Cybersécurité et infonuagique : explore les différentes techniques permettant de sécuriser les données, détecte les failles, évalue la gravité des menaces potentielles et planifie des contre-mesures appropriées pour réduire la vulnérabilité aux attaques.
Lors de la demande d’admission, les personnes étudiantes doivent préciser le cheminement et le profil de leur choix.
CHEMINEMENT RÉGULIER
Offert à l’automne et à l’hiver à temps complet ou à temps partiel.
Tu pourras effectuer 2 stages rémunérés en entreprise.
CHEMINEMENT DUAL
Offert à l’automne et à temps complet seulement.
Tu pourras effectuer 2 stages et 4 cours rémunérés en entreprise.
Ce cheminement te permet d’effectuer 18 crédits en entreprise, soit près de 50 % de ta 3e année, à l’occasion de 2 jours / semaine.
CHEMINEMENT DEC-BAC
Offert à l’automne et à l’hiver à temps complet ou à temps partiel.
Tu pourras effectuer 2 stages rémunérés en entreprise.
Grâce aux ententes entre l'UQTR et les cégeps de Trois-Rivières, de Shawinigan, de Sorel-Tracy, de Lanaudière (campus de Joliette) et de Sherbrooke, tu pourras bénéficier de 30 crédits reconnus, soit une année complète.
Les plus de l’UQTR
2 stages rémunérés en entreprise ou dans les laboratoires de recherche (intelligence artificielle, génie logiciel, calcul scientifique, probabilités et statistiques, etc.)
Cheminement DUAL, unique au Québec, permet de travailler près de 50 % de ta 3e année sur des projets en entreprise
Grand nombre de cours optionnels à la pointe des nouvelles technologies
Laboratoires et un réseau de micro-ordinateurs performants accessibles en tout temps
Salle de haute performance dédiée à l’eSports
Association des étudiant(e)s en mathématiques et informatique (AMI)
Ce programme est pour toi si :
Tu aimes la programmation et les nouvelles technologies
Tu aimes solutionner des problèmes complexes
Tu es curieux et tu as une pensée logique
Tu es curieux et tu as une pensée logique
Tu es persévérant et habile pour communiquer
Les objectifs de ce programme à l’UQTR
Au terme de son programme d'études, l'étudiant, en plus de maîtriser les concepts fondamentaux de l'informatique et du génie logiciel, aura acquis les habiletés suivantes :
- Il sera en mesure de procéder à l'analyse, à la conception, à l'implantation, au test et au maintien de logiciels de qualité;
- Il sera capable de planifier et de conduire des projets informatiques et d'en estimer les coûts;
- Il aura acquis un esprit critique ainsi que des méthodes de travail lui permettant d'appliquer et d'intégrer un ensemble de concepts théoriques et pratiques;
- Il sera capable d'utiliser les concepts et les outils mathématiques nécessaires en informatique;
- Il aura acquis des compétences dans le développement de systèmes logiciels;
- Il aura appris à développer des solutions intégrées et efficaces à l'aide d'activités telles que la résolution de problèmes, les projets, les stages;
- Il aura acquis des connaissances et développé des habiletés dans une ou plusieurs spécialités de l'informatique;
- Il sera capable de s'adapter à différents environnements matériels et logiciels;
- Il sera en mesure d'identifier les possibilités et les limites des applications de l'informatique et d'évaluer leurs conséquences sociales;
- Il sera en mesure de communiquer efficacement, tant de façon orale qu'écrite, les résultats de ses travaux;
- Il sera capable de travailler de façon autonome;
- Il sera capable de travailler en équipe, éventuellement multidisciplinaire;
- Il sera capable de faire face à l'évolution rapide de la discipline;
- Il sera préparé à entreprendre des études de cycles supérieurs;
- Il sera préparé à s'intégrer facilement au marché du travail au moyen de stages;
- Il sera apte à exercer la profession d'informaticien selon les règles de l'éthique qui régissent son champ d'activités professionnelles.
Admission
Contingentement et capacités d'accueilTrimestre d'admission et rythme des études
- Admission à l'automne et l'hiverConditions d'admission
Études au Québec
Base collégialeÊtre titulaire d'un diplôme d'études collégiales (DEC) préuniversitaire ou l'équivalent et avoir complété les cours de niveau collégial suivants ou leur équivalent:
Mathématiques :
- 201-SN2 ou 201- SH2 ou 201-NYA ou 201-103 (objectif : 00UN ou 0M02 – 022X ou 0PU2) et
- 201-SN3 ou 201- SH3 ou 201-NYB ou 201-203 (objectif : 00UP ou 0M03 – 022Y ou 0PU3) et
- 201-SN4 ou 201-SH4 ou 201-NYC ou 201-105 (objectif :00UQ ou 0M04 – 022Z ou 0PU4)
OU
être titulaire d'un diplôme d'études collégiales (DEC) en techniques de l'informatique ou l'équivalent et avoir complété les cours de niveau collégial suivants ou leur équivalent :
Mathématiques :
- 201-SN2 ou 201- SH2 ou 201-NYA ou 201-103 (objectif : 00UN ou 0M02 – 022X ou 0PU2) et
- 201-SN3 ou 201- SH3 ou 201-NYB ou 201-203 (objectif : 00UP ou 0M03 – 022Y ou 0PU3) et
- 201-SN4 ou 201-SH4 ou 201-NYC ou 201-105 (objectif :00UQ ou 0M04 – 022Z ou 0PU4)
Remarque : le titulaire d'un diplôme d'études collégiales (DEC) technique dont on n'aura pu établir à l'aide du dossier qu'il possède toutes les connaissances requises pourrait, selon le cas, être admis conditionnellement à la réussite de cours d'appoint ou de cours de niveau collégial, selon la recommandation du responsable de programme.
Par ailleurs, les titulaires d'un diplôme d'études collégiales (DEC) technique peuvent bénéficier de reconnaissances d'acquis, notamment sous forme d'exemptions, sur recommandation du responsable de programme.
Être titulaire d'un diplôme universitaire (baccalauréat ou certificat) ou l'équivalent et posséder des connaissances équivalentes au contenu des cours de niveau collégial suivants:
Mathématiques :
- 201-SN2 ou 201- SH2 ou 201-NYA ou 201-103 (objectif : 00UN ou 0M02 – 022X ou 0PU2) et
- 201-SN3 ou 201- SH3 ou 201-NYB ou 201-203 (objectif : 00UP ou 0M03 – 022Y ou 0PU3) et
- 201-SN4 ou 201-SH4 ou 201-NYC ou 201-105 (objectif :00UQ ou 0M04 – 022Z ou 0PU4)
Le candidat, dont on n'aura pu établir à l'aide du dossier qu'il possède toutes les connaissances requises, pourra être admis conditionnellement à la réussite de cours d'appoint, selon la recommandation du responsable du programme.
Avoir occupé pendant au moins un an une fonction permettant l'acquisition d'une expérience en informatique et posséder des connaissances équivalentes au contenu des cours de niveau collégial suivants:
Mathématiques :
- 201-SN2 ou 201- SH2 ou 201-NYA ou 201-103 (objectif : 00UN ou 0M02 – 022X ou 0PU2) et
- 201-SN3 ou 201- SH3 ou 201-NYB ou 201-203 (objectif : 00UP ou 0M03 – 022Y ou 0PU3) et
- 201-SN4 ou 201-SH4 ou 201-NYC ou 201-105 (objectif :00UQ ou 0M04 – 022Z ou 0PU4)
Le candidat adulte doit joindre à sa demande d'admission toutes les attestations ou autres pièces pouvant établir qu'il possède l'expérience et les connaissances requises.
Le candidat adulte admissible dont on n'aura pu établir à l'aide du dossier qu'il possède toutes les connaissances requises pourrait, selon le cas, être admis conditionnellement à la réussite de cours d'appoint ou de cours de niveau collégial, selon la recommandation du responsable du programme.
Note :
Tous les étudiants doivent se conformer aux conditions relatives à la maîtrise du français.
Études hors Québec
Base collégialeÊtre une personne détentrice d'un diplôme d'études préuniversitaires totalisant 13 années réussi avec une moyenne de 12/20.
OU
d'un diplôme d'études préuniversitaires totalisant 12 années et une année d'études universitaires réussis avec une moyenne de 12/20.
À moins d'ententes conclues avec le Gouvernement du Québec, toutes les personnes candidates, ayant 12 ans de scolarité devront compléter une année de mise à niveau;
OU
d'un baccalauréat de l'enseignement secondaire français (général ou technologique) réussi avec une moyenne de 12/20.
ET
Posséder les équivalences suivantes Mathématiques : 00UN ou 01Y1 ou 022X; 00UP ou 01Y2 ou 022Y; 00UQ ou 01Y4 ou 022Z.
Note : L’UQTR offre les cours d’appoint qui correspondent aux cours exigés, le cas échéant.
Pour mener à bien vos études, une bonne maîtrise de la langue française est nécessaire. Pour connaître le test de français à l'admission qui s'applique à votre situation, veuillez consulter le lien suivant : Tests de français.
Modalités de sélection des candidatures
À NOTERCheminements DUAL
Ces cheminements sont offerts à temps complet seulement à la session automne.
Acquiers une expérience sur le marché du travail!
Grâce aux 2 stages obligatoires rémunérés, tu pourras mettre tes connaissances en action pendant près de 16 semaines en entreprise ou dans un milieu de recherche.
En ajoutant le cheminement DUAL à ton parcours, tu tisseras des liens privilégiés avec des entreprises et pourras travailler sur des projets d’envergure lors de ta 3e année.
LA RECONNAISSANCE DES ACQUIS ET DES COMPÉTENCES - RAC
Les titulaires d’un DEC en Techniques d’intégration multimédia peuvent bénéficier d’une passerelle DEC-BAC et jusqu’à 18 crédits reconnus.
Fais reconnaître tes acquis et tes compétences provenant soit d’une autre formation ou de tes connaissances et de tes savoir-faire cumulés.
En savoir plus sur la RAC
Double BAC en physique et en informatique
Unique au Québec
Obtiens 2 diplômes en 4 ans
Deviens une ou un candidat très recherché sur le marché du travail
Science forensique (traces numériques)
Analyse les supports numériques et électroniques aux fins d’enquête et développe une expertise en criminalité technologique
Baccalauréat unique au Québec
Double BAC en mathématiques et en informatique
Unique au Québec
Obtiens 2 diplômes en 4 ans
Deviens un expert dans des disciplines essentielles pour comprendre le monde et la révolution technologique
Avenir : Carrière et perspectives
Les perspectives d'emploi en informatique sont excellentes pour les prochaines années.
Exemples de professions
- Administratrice, administrateur de systèmes
- Analyste d’affaires et de données
- Analyste en sécurité et technologies de l’information
- Architecte de logiciels
- Architecte en intelligence artificielle
- Développeuse, développeur de logiciels
- Programmeuse, programmeur
Plusieurs secteurs d'emploi t'attendent!
- Gouvernement et ministères
- Entreprises privées
- Cabinets d’avocats
- Firmes de consultants
- Fournisseurs de services informatiques
- Centres de santé et services sociaux
Programmes connexes offerts à l'UQTR
Baccalauréat
Poursuis tes études supérieures à l'UQTR
Diplôme d'études supérieures spécialisées
Structure du programme et liste des cours
Développement de logiciels
(Cheminement: 1) À moins d'indication contraire, un cours comporte trois (3) crédits.Cours obligatoires (60 crédits)
INF1001 Programmation Web Permettre à l'étudiant de s'initier aux concepts du Web. A travers des exemples détaillés, l'étudiant apprend à créer et à publier des sites Web en exploitant les nouvelles technologies du Web. Il se familiarise avec les langages de programmation propres au Web. Principaux éléments du Web; langage de balisage, conception de page Web, validation, organisation et gestion d'un site Web, programmation coté client et coté serveur, introduction à XML. Technologies : HTML, CSS, DOM, JavaScript, php. Ce cours utilise les langages HTML, JavaScript, VbScript, XML et l'outil de conception de pages Web EditPlus.INF1002 Introduction à la programmation objet Permettre à l'étudiant de se familiariser avec l'informatique comme discipline et surtout à la programmation impérative et orientée objet. Présentation des structures de commandes, des types, des objets, des structures de données élémentaires (tableau, chaîne de caractères); mécanismes de structuration d'applications : sous-programmes, notions de classe, d'objet, d'application; développement d'applications : choix des données et des algorithmes, codification, compilation, exécution, mise au point de classes et d'applications. Introduction à l'informatique; outils de construction d'application : syntaxe et sémantique d'un langage de haut niveau; variables, types, expressions, affectation; entrée-sortie élémentaire; structures de sélection et d'itération : sous-programmes et passage de paramètres : introduction au paradigme objet : notions de classe, d'objet, d'état et de méthode, d'héritage; algorithmes et résolution de problèmes (problem-solving) : stratégies de solution de problèmes, rôles de l'algorithme dans la résolution de problèmes; stratégies d'implantation; structure de données de base : tableaux, chaînes de caractères; stratégie de vérification : conception de points-tests. Ce cours utilise le langage de programmation Java sur la plate-forme Eclipse. Il comporte 18 heures d'atelier.
INF1004 Structures de données et algorithmes (INF1002) Permettre à l'étudiant de se familiariser avec les structures de données classiques et les algorithmes qui leur sont associés; réaliser des implantations statiques et dynamiques de ces structures : faire l'évaluation de la complexité spatiale et temporelle dans les cas simples; étudier la récursion et la comparer avec l'itération. Revue des concepts élémentaires de programmation; bases de la programmation Objet: encapsulation, dissimulation de l'information; séparation du comportement et de l'implantation; héritage et polymorphisme; conception par héritage et par composition; utilisation de fichiers; les principales structures de données: liste, pile, file, table d'adressage dispersé, arbre, graphe; implantation statique et dynamique; les algorithmes de fouille, de tri, les fonctions de hachage et les stratégies de traitement des collisions, parcours d'arbres et de graphes; le concept de récursion : les fonctions mathématiques récursives; comparaison avec les fonctions itératives correspondantes; implantation de récursion à l'aide de piles; analyse élémentaire de la complexité des algorithmes: complexité spatiale et complexité temporelle; notation "grand O", comportement du meilleur cas, du cas moyen et du pire cas; principales classes de complexité d'algorithmes; stratégies de test pour les classes et les applications. Ce cours utilise le langage de programmation Java et la plateforme Eclipse.
INF1006 Analyse et modélisation (INF1004) Familiariser l'étudiant avec le processus de développement de systèmes informatiques, et plus particulièrement avec les phases initiales. L'initier à l'exercice de l'analyse des besoins, à la spécification et à la modélisation des systèmes ainsi qu'à l'évaluation de ces étapes. Explorer les fondements et l'évolution des méthodes d'analyse. Processus de développement et activités initiales: analyse des besoins et spécifications; importance de l'analyse dans le processus de développement; étude détaillée et application d'une méthode (UML); différentes étapes du processus: analyse des besoins, formalisation et validation; analyse et modélisation orientées objet; outils GLAO (CASE) de modélisation; dossier des spécifications et des exigences d'un logiciel; normes, critères de qualité de la spécification; revue technique; réalisation d'un dossier de spécifications. Le cours comporte 12 heures d'atelier.
INF1007 Conception de logiciels (INF1006) Initier l'étudiant au processus de conception et le sensibiliser à ses difficultés et à son importance. Procéder à l'étude détaillée et à l'application d'une méthode. Permettre à l'étudiant d'élaborer des solutions de qualité. Problématique du processus de conception. Importance de la conception dans le processus de développement. Processus de conception : principes, méthode et notation. Étude détaillée et application d'une méthode. Différentes étapes du processus. Conception et styles d'architectures logicielles. Patrons de conception (GRASP). Qualité de la conception : élaboration de solutions réutilisables, maintenables, extensibles, etc. Conception orientée objet. Caractéristiques d'une bonne conception détaillée (modularité, abstraction, cohésion, couplage, etc.). Outils d'aide à la conception. Documentation de la conception. Revue de la conception. Réalisation d'un projet.
INF1008 Analyse et conception d'algorithmes (ALG1001 ou PIF1005; INF1004) L'étudiant développera son habileté à produire des algorithmes corrects et efficaces. Il pourra analyser la complexité spatiale et temporelle d'un algorithme. Il entrera en contact avec différentes classes d'algorithmes et s'habituera à choisir le type d'algorithme qui convient le mieux à un problème donné. Définition d'un algorithme et de sa complexité. Notations asymptotiques. Résolution de récurrence. Étude d'efficacité et de complexité d'algorithmes de tri. Stratégies de conception d'algorithmes : algorithmes voraces, diviser-pour-régner, programmation dynamique, algorithmes probabilistes, exploration de graphes. Études de cas.
INF1009 Réseaux d'ordinateurs I (SIF1015) Le but du cours est de fournir les bases indispensables à la compréhension des architectures des réseaux informatiques qui permettent l'échange des données entre ordinateurs. Il précise le fonctionnement des réseaux : architecture en couches, protocoles. Étant donné que la connaissance du domaine est compliquée par la richesse du vocabulaire, on présente progressivement les notions et le vocabulaire à l'aide d'exemples simples. Une première partie présente les aspects liés à la transmission des informations : circuits de données, protocoles de liaison, réseaux à circuits virtuels. Une fois les principes présentés, on détaille le formalisme des sept couches OSI : concepts, description du modèle. Une troisième partie est consacrée aux réseaux locaux (Ethernet, Token Ring, Sans fil). Finalement, on explique les principes des réseaux IP.
INF1010 Réseaux d'ordinateurs II (INF1009) Ce cours permet aux étudiants de se familiariser avec les concepts et les contraintes des nouvelles technologies de l'information et des communications. Présentation des spécificités du réseau Internet : services, protocoles, applications, administration; introduction à la gestion sécurisée de l'information et aux techniques et mécanismes de sécurité informatique. Ce cours offre la possibilité aux étudiants de définir, de spécifier et de réaliser des applications clients serveurs sur le réseau Internet et de faire de l'administration de quelques services TCP/IP (DHCP, DNS,…) et des outils réseaux (Switch, routeur,..).
INF1014 Aspects juridiques de l'informatique (1 crédit) L'étudiant se familiarise avec les aspects juridiques de l'informatique. Il apprend à connaître les principales lois touchant la pratique de l'informatique. Il développe l'habileté à analyser des situations de travail de façon à éviter les problèmes juridiques. Notions juridiques : juridiction et territorialité, droit civil et droit pénal. Principales lois touchant la pratique de l'informatique : le droit d'auteur, le respect de la vie privée dans les secteurs public et privé, l'accès à l'information, le cadre juridique des technologies de l'information. Les aspects légaux des licences de produits informatiques. Les aspects légaux particuliers à l'Internet. Règlements pédagogiques particuliers : Pour s'inscrire aux cours TIN1003 Science, technologie et société et INF1014 Aspects juridiques de l'informatique, l'étudiant en informatique doit avoir complété 60 crédits dans le programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
INF1015 Stage d'informatique I L'objectif du cours Stage d'informatique I est de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1015 Stage d'informatique I, l'étudiant doit avoir réussi obligatoirement 45 crédits du programme.
INF1016 Stage d'informatique II Les objectifs du cours Stage d'informatique II sont de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail et de parfaire l'acquisition des méthodes de travail propres à l'informatique. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant en informatique doit avoir réussi obligatoirement 60 crédits du programme et le cours INF1015 Stage d'informatique I. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours GMA1001 Stages. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en physique et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours INF1015 Stage d'informatique I.
INF1034 Introduction aux interfaces utilisateur (INF1002) Amener l'étudiant à comprendre le comportement humain dans son interaction avec un environnement logiciel interactif, à développer une interface utilisateur simple et à évaluer l'ergonomie d'un logiciel interactif. Concepts de base de l'ergonomie du logiciel et des interactions personne-machine : modèles, principes et lignes directrices; introduction à la conception d'interfaces utilisateur : processus, outils, méthodologie et normes; outils de développement d'interfaces graphiques : utilisation des contrôles et des objets prédéfinis, propriétés, méthodes et gestion des événements; évaluation des interfaces : test, enquête et expérimentation. Ce cours comporte des exercices en Java.
INF1035 Concepts avancés en objet (INF1004) Amener l'étudiant à comprendre les mécanismes du développement orienté-objet. Maîtriser les concepts relatifs au paradigme objet. Utiliser un environnement de développement (IDE). Utiliser le paradigme de programmation événementielle. Utiliser les principes (et mécanismes) de la programmation par contrat. Intégrer la programmation aspect. Etude des notions importantes de la programmation orientée-objet : héritage simple et multiple, hiérarchie des classes, polymorphisme, notion de liaison statique et de liaison dynamique, etc. Notion d'interface et de classe abstraite. Notion d'extension de classes. Généricité. Pattern de conception (GoF). Refactoring. Notions de robustesse et de sécurité dans les applications. Programmation événementielle : événements, messages, gestion des exceptions. Programmation par contrats. Programmation aspect : notions d'aspect, de poincut, de point de jointure et d'advice. Les langages utilisés dans ce cours sont C#, Java et AspectJ (à titre comparatif). Les environnements de développement sont les plateformes Eclipse et Visuel C#. Le cours comporte 18 heures d'atelier.
PIF1005 Mathématiques pour informaticiens I Ce cours vise à introduire les concepts mathématiques fondamentaux en informatique. Rappels mathématiques : calcul avec les nombres réels, inégalités, logarithmes; théorie des ensembles : relations, fonctions, relations d'ordre; logique : techniques de preuve; algèbre booléenne ; graphes; induction mathématique.
PIF1006 Mathématiques pour informaticiens II (PIF1005) Ce cours vise à compléter la formation de base en mathématiques en vue d'applications en informatique. Algèbre matricielle : opérations, déterminant et matrice inverse; concepts d'analyse numérique : représentation des nombres et erreur, interpolation et approximation; langages formels : langage et grammaire, machine à états finis avec et sans sorties , équivalence d'automates, automate fini non déterministe, expression régulière, machine de Turing; cryptographie : schéma de cryptage, authentification, identification, cryptographie à clé secrète, cryptographie à clé publique; codage et compression de données : techniques de compression, compression sans perte (code de Hoffman), compression avec perte (compression JPEG). Ce cours comporte des travaux avec le logiciel Matlab.
SIF1015 Systèmes d'exploitation L'étudiant se familiarise avec les concepts fondamentaux des systèmes d'exploitation : structure générale d'un système d'exploitation, gestion des différents sous-systèmes : processus/thread, communication inter-processus/thread, systèmes de fichiers, accès réseau, gestion de la mémoire. Gestion des processus et des threads; gestion des entrées/sorties tels que les dispositifs Windows; communication inter-processus : tubes anonymes et nommés, files de messages, sockets, signaux; introduction aux principes de fonctionnement d'un système de fichiers; introduction aux concepts de la gestion de la mémoire; introduction à la communication réseau par sockets. Les étudiants expérimentent les concepts théoriques par des projets de développement d'utilitaires dans un environnement de développement ouvert sous une plateforme telle que UNIX/LINUX/ANDROID. Règlement pédagogique particulier : Pour les étudiants du baccalauréat en génie électrique (concentration génie informatique) (7144) le préalable est GEI1072 Résolution de problèmes d'ingénierie en C. Pour les étudiants du baccalauréat en informatique (7833) les préalables sont INF1004 Structures de données et algorithmes et SIF1053 Architecture des ordinateurs.
SIF1053 Architecture des ordinateurs L'étudiant prendra connaissance des éléments fondamentaux des architectures et des composantes des ordinateurs modernes tant statiques que mobiles (ex : architectures ARM, X86, x86-64), des organes périphériques. Etude des composantes des ordinateurs modernes: mémoire, circuits et représentation de l'information. Unité de commande, représentation des instructions machine, notions d'adressage, notions de microprogrammation et machine virtuelle. Unité arithmétique et logiques. Introduction des notions de communication série et parallèle.
SMI1001 Bases de données I Le cours vise à donner une solide introduction tant théorique que pratique aux concepts informatiques fondamentaux ayant trait aux bases de données, particulièrement aux bases de données relationnelles. Outre la modélisation des données qui constitue une partie importante de ce cours, l'apprentissage du langage SQL et d'un SGBD (Système de Gestion de Bases de Données) moderne seront également des objectifs importants de ce cours. Introduction aux bases de données : modèles et langages, les différents utilisateurs et leurs besoins, structure et architecture des SGBD. Le modèle Entité-Relation, modélisation UML. Le modèle relationnel : aperçu de l'algèbre et du calcul relationnel, notion de vue. Le langage SQL, aperçu d'autres langages relationnels. Les contraintes d'intégrité, les données manquantes et les valeurs nulles. La conception des bases de données relationnelles, dépendances fonctionnelles, dépendances multivaluées, dépendances de jointure, normalisation, formes normales 1FN, 2FN, 3FN, FNBC, 4FN et 5FN. Autres types de bases de données : relationnelles-objets et multidimensionnelles. Introduction aux données multimédias et XML. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'utilitaire TOAD. Le cours comporte 18 heures d'atelier.
SMI1002 Bases de données II (SMI1001) Le cours porte principalement sur des considérations techniques sous-jacentes à l'utilisation ou à la conception des SGBD, toujours dans le contexte du SGBD Oracle qui sert d'illustration et de contexte de mise en pratique des concepts. L'étudiant aura donc l'opportunité d'approfondir sa compréhension du fonctionnement interne d'un SGBD, notamment de Oracle, et d'autres aspects complémentaires associés à l'exploitation des données. Stockage et structures de fichiers, indexation et fonctions de hachage. Traitement et optimisation des requêtes. Traitement des transactions. Contrôle de la concurrence. Systèmes de recouvrement. Sécurité, contrôle des accès et encryptage. Bases de données et applications Web, modèles client-serveur et multitiers. Architectures des SGBD, bases de données parallèles et distribuées. Analyses des données, OLAP (on-line analytical processing), entreposage (warehousing) et forage (mining) de données. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'interface JSP (Java Sever Page).
STT1001 Probabilités et statistiques Statistiques de base en vue des applications. Séries statistiques : histogramme et polygone. Mesures de tendance centrale. Mesures de dispersion. Moments. Eléments de probabilités : variables aléatoires, distributions binomiales, hypergéométriques, normales. Poisson. Introduction à l'échantillonnage. Tests d'hypothèses simples.
TIN1003 Science, technologie et société (2 crédits) Identifier les effets inducteurs et destructeurs des innovations scientifiques et technologiques sur la société contemporaine; provoquer une réflexion critique sur la viabilité sociale des technologies nouvelles; préparer les étudiants à accepter la responsabilité sociale qui incombe à la future « intelligence technique supérieure ». Introduire aux thèmes principaux de la philosophie de la technique en étudiant les visages multiples de la technologie moderne et en examinant ses rapports avec les différentes dimensions impliquées dans le concept « qualité de vie ». Présenter une méthodologie pour l'analyse de risque : formes de risque (physiques, personnels, sociaux), méthodes d'évaluation de choix technologiques et de détermination de la viabilité sociale de ces technologies. Proposer et discuter des modèles de prises de décision dans l'allocation de ressources technologiques et l'implantation de technologies nouvelles (avec applications particulières à l'informatique, la robotique, etc.). Identifier les principes fondamentaux devant être respectés dans l'implantation de ces technologies. Circonscrire la fonction nouvelle et la responsabilité sociales de l'ingénieur. Règlement pédagogique particulier : Pour s'inscrire à ce cours, l'étudiant en informatique doit avoir réussi 60 crédits du programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
Cours optionnels (21 crédits)
L’étudiant doit suivre les cours suivants (12 crédits) : INF1011 Génie logiciel (INF1007) Familiariser l'étudiant avec les concepts et principes fondamentaux du génie logiciel et le sensibiliser à leur importance dans la production de logiciels de qualité. Amener l'étudiant à une compréhension des principes de base de l'assurance qualité. Principes et concepts fondamentaux du Génie Logiciel. Produit logiciel: caractéristiques. Processus de génie logiciel. Modèles de cycle de vie. Prototypage. Normes. Maturité des processus. Processus léger. Méthodes Agiles. Réutilisation de logiciel. Concepts favorisant la réutilisation - Pattern, COO, paradigme aspect. Entités réutilisable - lignes de produits logiciels, composants, produits COTS. Assurance qualité logiciel : Principes et Techniques. Processus de validation et de vérification : définition, rôles, techniques, impact sur la qualité, etc. Processus de test : techniques et stratégies. Planification, conception et réalisation des tests. Techniques de revues, Preuves, etc. Concepts et principes de la qualité. Contrôle de la qualité : qualité et métriques. Gestion de projets. Maintenance. Réingénierie. Documentation technique.INF1012 Élaboration et gestion de projets scientifiques (INF1011) Identifier et analyser les conséquences de l'innovation technologique et de la recherche et développement en sciences. Acquérir des connaissances et des techniques de travail en situation de projets informatiques. Développer l'aptitude à planifier de tels projets, à y participer et, éventuellement, à les gérer. Développer l'habileté à gérer son temps et celui de ses collaborateurs. Se familiariser à la dimension internationale de la gestion des projets. Les différentes formes d'innovation technologique. Évaluation des impacts positifs et négatifs de l'innovation technologique et de la recherche et développement en sciences : étude coût/bénéfice, impact sur les individus, la communauté scientifique et la société. Gestion de projets informatiques : identification des objectifs et définition du projet, élaboration de solutions à caractère scientifique, planification des activités, échéanciers; choix de l'équipe, attribution des responsabilités; importance de la coordination en environnement de projet; suivi des activités et gestion du temps; progiciels de gestion de projets.
INF1013 Environnement de développement et composantes logicielles (INF1005 ou INF1035; SIF1015) Compléter la formation des étudiants en lien avec les méthodologies et technologies de développement des applications Frame/Web d'envergure. Apprendre à construire des composants réutilisables en s'appuyant sur des bibliothèques existantes. Réaliser les applications Web et Frame selon les modèles MVC/MVP ainsi que des Application Serveur sous forme d'APE RESTFUL. Utiliser et configurer des environnements de développement pour de grands projets logiciels. Maîtriser les gestionnaires de dépendances de projets. Open Source/Propriétaires. Quelques-unes des technologies importantes seront utilisées : C# - ASP.Net, Java-JSP, Python-DJANGO, Ruby-Rails, GWT, ANGULAR, REACT, Maven, Gradle, etc.
INF1018 Analyse de programmes (INF1035) Présenter à l'étudiant les principes et les techniques de base de l'implantation des langages de programmation. L'initier à l'évaluation des langages de programmation et à l'analyse de programmes. Familiariser l'étudiant avec certains outils de description et d'analyse des langages de programmation. Étude des langages de programmation dans l'optique de construction d'outils d'environnement de programmation. Concepts fondamentaux des langages de programmation modernes. Classification et évaluation des langages de programmation. Concepts et critères de qualité. Syntaxe et sémantique des langages de programmation. Méthodes de description formelles. Grammaire et Langages. Méthodes d'analyse lexicale et syntaxique : principes, approches et applications. Outils pour le traitement des langages. Analyse sémantique. Introduction à la génération et à l'optimisation de code. Éléments d'analyse de programmes en langages évolués : statique, dynamique, dépendances, etc.
L'étudiant doit suivre deux ou trois cours (6 ou 9 crédits) parmi les cours d'informatique suivants : IAR1001 Intelligence artificielle (STT1001 ou STT1003; INF1008; INF1004) L'objectif principal de ce cours est d'apprendre les concepts de base de l'intelligence artificielle (IA) et, en particulier, ses aspects informatiques et mathématiques. L'étudiant devra être en mesure d'identifier les problèmes qui relèvent de l'IA, de sélectionner les techniques ou approches pertinentes et de les mettre en application de façon efficiente. Les techniques de représentation des connaissances (structures de données) et de recherche (algorithmes), ainsi que leur réalisation informatique, de même que certains domaines d'application, constituent la matière fondamentale de ce cours. Plus spécifiquement, la matière sera présentée principalement dans la perspective des agents intelligents, et, de façon complémentaire, dans le contexte des systèmes multiagents et de l'intelligence artificielle distribuée. Le cours fait le tour des aspects d'actualité de l'intelligence artificielle. Les agents "intelligents" servent de vecteur pour promouvoir l'explication des autres concepts de l'IA. Parmi ces concepts, nous voyons : les méthodes et stratégies de recherches de solution, les méthodes de jeux, la connaissance et le raisonnement fondés sur la logique du premier ordre et les inférences en logique du premier ordre, la planification et l'action logique et, enfin, le raisonnement probabiliste avec des connaissances incertaines. Dans une deuxième partie, nous introduisons la notion d'apprentissage automatique au moyen des réseaux de neurones et le traitement des langues naturelles.
INF1036 Sujets spéciaux en TI Développement de logiciel : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en développement de logiciel et qui ne sont pas nécessairement vues ou approfondies dans le programme. Développement d'applications mobiles : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en développement d'applications mobiles et qui ne sont pas nécessairement vues ou approfondies dans le programme. Science des données : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en science des données et qui ne sont pas nécessairement vues ou approfondies dans le programme. Cybersécurité et infonuagique : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en cybersécurité et infonuagique et qui ne sont pas nécessairement vues ou approfondies dans le programme. Règlement pédagogique particulier associé au cours : Pour s'inscrire au cours INF1036 Sujets spéciaux en TI, la personne étudiante inscrite au baccalauréat en informatique (7833 ou 7533) doit avoir réussi obligatoirement 45 crédits du programme. Pour s'inscrire au cours INF1036 Sujets spéciaux en TI, la personne étudiante inscrite au double baccalauréat en mathématiques et en informatique (6722) doit avoir réussi obligatoirement 75 crédits du programme. Pour s'inscrire au cours INF1036 Sujets spéciaux en TI, la personne étudiante inscrite au double baccalauréat en physique et en informatique (6925) doit avoir réussi obligatoirement 75 crédits du programme.
PRO1027 Programmation scientifique en C (INF1002 ou PRO1026) Approfondir les concepts fondamentaux de la conception et de la production de logiciel. Développer l'habileté à réaliser des logiciels de qualité. Réaliser des applications pratiques dans le domaine des méthodes numériques. Étude des langages C et C++. Qualité des programmes : clarté, lisibilité, modifiabilité, efficacité, facilité d'usage, robustesse. Programmation modulaire. Programmation en langage C ou C++. A titre indicatif, les applications sont choisies parmi les suivantes : statistiques, manipulation de matrices, résolution de systèmes d'équations linéaires, interpolation, approximation, dérivation et intégration numériques.
SIF1033 Traitement d'image (INF1004; STT1001 ou STT1042) Amener l'étudiant à pouvoir utiliser l'ordinateur pour traiter une image de façon à en améliorer la perception visuelle et à permettre la détection d'objets significatifs. Présentation des notions de base du traitement de l'image : correction géométrique et radiométrique des images, amélioration du contraste, amélioration des images par filtrage spatial isotropique et anisotropique, spectral et morphologique; segmentation des images par seuillage; détection des arêtes et des contours, détection des droites et des formes circulaires, détection des objets par corrélation spatiale; génération d'images tomographiques; applications Client/Serveur permettant le traitement d'image à distance; protocoles de transfert d'images. Les étudiants expérimentent les concepts du traitement des images par des projets pratiques codés en langage C ou en langage C++.
L'étudiant peut suivre un cours (0 ou 3 crédits) parmi les cours d'informatique des cheminements (02), (03) et (04) : CSE1001 Introduction à la cybersécurité (INF1001; INF1004) Ce cours permettra à l’étudiant de prendre conscience des problématiques et des enjeux critiques en cybersécurité. L’étudiant pourra se familiariser avec les concepts de base et acquérir les connaissances essentielles dans divers domaines d’expertise de la cybersécurité. Il aura l’occasion d’explorer les différentes techniques permettant de sécuriser les données. Ce cours aborde principalement les volets suivants: Enjeux, Modèles de sécurité, Triade CIA, Identification des actifs informationnels et analyse de risque, Cybermenaces et mécanismes de cyberdéfense, Étude des vulnérabilités, exploitation et contre-mesures, Hachage, Cryptosystèmes, Protocoles cryptographiques, Spécification des politiques de sécurité, Modèles de contrôle d’accès, Authentification.
INF1020 Commerce électronique Ce cours a comme objectif principal l'initiation aux concepts de base des affaires et du commerce électronique et leur mise en pratique dans la réalisation d'un projet de commerce électronique. Le cours a aussi comme objectifs secondaires : d'apprendre à gérer un projet d'équipe en informatique. Aperçu du commerce électronique; la "digitalisation" des affaires; les processus et stratégies B2B (business-to-business); le rôle des intermédiaires indépendants (third parties); l'environnement régulateur; EDI, e-commerce et Internet; risques des systèmes non-sécuritaires; risques de gestion; normes, protocoles et langages Internet; cryptographie et authentification; murs coupe-feu (firewalls); mécanismes de paiement en ligne pour le e-commerce; agents intelligents; le marketing sur le Web; autres sujets d'actualité en affaires et en commerce électronique. Règlement pédagogique particulier : Pour s'inscrire au cours INF1020 Commerce électronique, les étudiants inscrits au cheminement DEC-BAC (7533) doivent avoir réussi les cours obligatoires de la première session. Les étudiants inscrits au double baccalauréat : mathématiques et informatique (6833) ou inscrits au double baccalauréat en physique et en informatique (6925) doivent avoir réussi les cours obligatoires des cinq (5) premières sessions.
INF1030 Introduction au développement d'applications mobiles (version Android) (INF1005 ou INF1035) Dans ce cours, l'étudiant sera amené à comprendre le cycle de développement d'applications mobiles. Utilisant le langage Java, les étudiants pourront créer des programmes tant standalone que déployés sur des plateformes mobiles. L'emphase sera mise sur les apprentissages des meilleurs pratiques de développement d'application mobiles et ce dans le but de faciliter et d'augmenter l'efficacité de ce développement. Les étudiants pourront aussi comprendre le fonctionnement de la machine virtuelle Dalvik comme plateforme pour le développement d'applications Android.
INF1031 Développement d'applications mobiles avancées (version Android) (INF1030) A partir de notions acquises dans le cours Introduction au développement d'applications mobiles (INF1030), ce cours permet aux étudiants de développer leurs compétences en développement d'applications mobiles avancées et ce dans des domaines divers comme les sciences, le commerce, la santé, le divertissement, etc. De plus, les étudiants seront amenés à mieux comprendre le développement d'applications verticales impliquant des notions d'architecture multi-tiers, de connectivité réseau. De sécurité, etc.
SDD1001 Introduction à la science des données Ce cours aborde les langages modernes utilisés en sciences des données comme Python, les bibliothèques de statistiques, de calcul symbolique ainsi que leurs applications. Les langages seront abordés dans les paradigmes orientés objets et fonctionnels.
SDD1002 Modélisation et simulation (STT1001; PIF1005) Ce cours aborde les différentes techniques théoriques et pratiques de simulation, de modélisation, et de visualisation, des données. L'étudiant sera amené à explorer plusieurs outils utilisés dans les sciences des données. Ce cours aborde aussi les notions liées à la généralisation: sous-ajustement, sur-ajustement, validation croisée. Approches: classification, régression, agrégation (clustering). Principaux éléments: Outils de simulation, de visualisation et manipulation de données comme Python ou R ou Orange, ou Tableau, autre.
Cours complémentaires (9 crédits)
L'étudiant doit suivre trois cours complémentaires (9 crédits) parmi les suivants. Certains cours sont offerts en ligne. Consulter la liste.Développement d'applications Web et mobiles
(Cheminement: 2) À moins d'indication contraire, un cours comporte trois (3) crédits.Cours obligatoires (60 crédits)
INF1001 Programmation Web Permettre à l'étudiant de s'initier aux concepts du Web. A travers des exemples détaillés, l'étudiant apprend à créer et à publier des sites Web en exploitant les nouvelles technologies du Web. Il se familiarise avec les langages de programmation propres au Web. Principaux éléments du Web; langage de balisage, conception de page Web, validation, organisation et gestion d'un site Web, programmation coté client et coté serveur, introduction à XML. Technologies : HTML, CSS, DOM, JavaScript, php. Ce cours utilise les langages HTML, JavaScript, VbScript, XML et l'outil de conception de pages Web EditPlus.INF1002 Introduction à la programmation objet Permettre à l'étudiant de se familiariser avec l'informatique comme discipline et surtout à la programmation impérative et orientée objet. Présentation des structures de commandes, des types, des objets, des structures de données élémentaires (tableau, chaîne de caractères); mécanismes de structuration d'applications : sous-programmes, notions de classe, d'objet, d'application; développement d'applications : choix des données et des algorithmes, codification, compilation, exécution, mise au point de classes et d'applications. Introduction à l'informatique; outils de construction d'application : syntaxe et sémantique d'un langage de haut niveau; variables, types, expressions, affectation; entrée-sortie élémentaire; structures de sélection et d'itération : sous-programmes et passage de paramètres : introduction au paradigme objet : notions de classe, d'objet, d'état et de méthode, d'héritage; algorithmes et résolution de problèmes (problem-solving) : stratégies de solution de problèmes, rôles de l'algorithme dans la résolution de problèmes; stratégies d'implantation; structure de données de base : tableaux, chaînes de caractères; stratégie de vérification : conception de points-tests. Ce cours utilise le langage de programmation Java sur la plate-forme Eclipse. Il comporte 18 heures d'atelier.
INF1004 Structures de données et algorithmes (INF1002) Permettre à l'étudiant de se familiariser avec les structures de données classiques et les algorithmes qui leur sont associés; réaliser des implantations statiques et dynamiques de ces structures : faire l'évaluation de la complexité spatiale et temporelle dans les cas simples; étudier la récursion et la comparer avec l'itération. Revue des concepts élémentaires de programmation; bases de la programmation Objet: encapsulation, dissimulation de l'information; séparation du comportement et de l'implantation; héritage et polymorphisme; conception par héritage et par composition; utilisation de fichiers; les principales structures de données: liste, pile, file, table d'adressage dispersé, arbre, graphe; implantation statique et dynamique; les algorithmes de fouille, de tri, les fonctions de hachage et les stratégies de traitement des collisions, parcours d'arbres et de graphes; le concept de récursion : les fonctions mathématiques récursives; comparaison avec les fonctions itératives correspondantes; implantation de récursion à l'aide de piles; analyse élémentaire de la complexité des algorithmes: complexité spatiale et complexité temporelle; notation "grand O", comportement du meilleur cas, du cas moyen et du pire cas; principales classes de complexité d'algorithmes; stratégies de test pour les classes et les applications. Ce cours utilise le langage de programmation Java et la plateforme Eclipse.
INF1006 Analyse et modélisation (INF1004) Familiariser l'étudiant avec le processus de développement de systèmes informatiques, et plus particulièrement avec les phases initiales. L'initier à l'exercice de l'analyse des besoins, à la spécification et à la modélisation des systèmes ainsi qu'à l'évaluation de ces étapes. Explorer les fondements et l'évolution des méthodes d'analyse. Processus de développement et activités initiales: analyse des besoins et spécifications; importance de l'analyse dans le processus de développement; étude détaillée et application d'une méthode (UML); différentes étapes du processus: analyse des besoins, formalisation et validation; analyse et modélisation orientées objet; outils GLAO (CASE) de modélisation; dossier des spécifications et des exigences d'un logiciel; normes, critères de qualité de la spécification; revue technique; réalisation d'un dossier de spécifications. Le cours comporte 12 heures d'atelier.
INF1007 Conception de logiciels (INF1006) Initier l'étudiant au processus de conception et le sensibiliser à ses difficultés et à son importance. Procéder à l'étude détaillée et à l'application d'une méthode. Permettre à l'étudiant d'élaborer des solutions de qualité. Problématique du processus de conception. Importance de la conception dans le processus de développement. Processus de conception : principes, méthode et notation. Étude détaillée et application d'une méthode. Différentes étapes du processus. Conception et styles d'architectures logicielles. Patrons de conception (GRASP). Qualité de la conception : élaboration de solutions réutilisables, maintenables, extensibles, etc. Conception orientée objet. Caractéristiques d'une bonne conception détaillée (modularité, abstraction, cohésion, couplage, etc.). Outils d'aide à la conception. Documentation de la conception. Revue de la conception. Réalisation d'un projet.
INF1008 Analyse et conception d'algorithmes (ALG1001 ou PIF1005; INF1004) L'étudiant développera son habileté à produire des algorithmes corrects et efficaces. Il pourra analyser la complexité spatiale et temporelle d'un algorithme. Il entrera en contact avec différentes classes d'algorithmes et s'habituera à choisir le type d'algorithme qui convient le mieux à un problème donné. Définition d'un algorithme et de sa complexité. Notations asymptotiques. Résolution de récurrence. Étude d'efficacité et de complexité d'algorithmes de tri. Stratégies de conception d'algorithmes : algorithmes voraces, diviser-pour-régner, programmation dynamique, algorithmes probabilistes, exploration de graphes. Études de cas.
INF1009 Réseaux d'ordinateurs I (SIF1015) Le but du cours est de fournir les bases indispensables à la compréhension des architectures des réseaux informatiques qui permettent l'échange des données entre ordinateurs. Il précise le fonctionnement des réseaux : architecture en couches, protocoles. Étant donné que la connaissance du domaine est compliquée par la richesse du vocabulaire, on présente progressivement les notions et le vocabulaire à l'aide d'exemples simples. Une première partie présente les aspects liés à la transmission des informations : circuits de données, protocoles de liaison, réseaux à circuits virtuels. Une fois les principes présentés, on détaille le formalisme des sept couches OSI : concepts, description du modèle. Une troisième partie est consacrée aux réseaux locaux (Ethernet, Token Ring, Sans fil). Finalement, on explique les principes des réseaux IP.
INF1010 Réseaux d'ordinateurs II (INF1009) Ce cours permet aux étudiants de se familiariser avec les concepts et les contraintes des nouvelles technologies de l'information et des communications. Présentation des spécificités du réseau Internet : services, protocoles, applications, administration; introduction à la gestion sécurisée de l'information et aux techniques et mécanismes de sécurité informatique. Ce cours offre la possibilité aux étudiants de définir, de spécifier et de réaliser des applications clients serveurs sur le réseau Internet et de faire de l'administration de quelques services TCP/IP (DHCP, DNS,…) et des outils réseaux (Switch, routeur,..).
INF1014 Aspects juridiques de l'informatique (1 crédit) L'étudiant se familiarise avec les aspects juridiques de l'informatique. Il apprend à connaître les principales lois touchant la pratique de l'informatique. Il développe l'habileté à analyser des situations de travail de façon à éviter les problèmes juridiques. Notions juridiques : juridiction et territorialité, droit civil et droit pénal. Principales lois touchant la pratique de l'informatique : le droit d'auteur, le respect de la vie privée dans les secteurs public et privé, l'accès à l'information, le cadre juridique des technologies de l'information. Les aspects légaux des licences de produits informatiques. Les aspects légaux particuliers à l'Internet. Règlements pédagogiques particuliers : Pour s'inscrire aux cours TIN1003 Science, technologie et société et INF1014 Aspects juridiques de l'informatique, l'étudiant en informatique doit avoir complété 60 crédits dans le programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
INF1015 Stage d'informatique I L'objectif du cours Stage d'informatique I est de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1015 Stage d'informatique I, l'étudiant doit avoir réussi obligatoirement 45 crédits du programme.
INF1016 Stage d'informatique II Les objectifs du cours Stage d'informatique II sont de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail et de parfaire l'acquisition des méthodes de travail propres à l'informatique. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant en informatique doit avoir réussi obligatoirement 60 crédits du programme et le cours INF1015 Stage d'informatique I. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours GMA1001 Stages. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en physique et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours INF1015 Stage d'informatique I.
INF1034 Introduction aux interfaces utilisateur (INF1002) Amener l'étudiant à comprendre le comportement humain dans son interaction avec un environnement logiciel interactif, à développer une interface utilisateur simple et à évaluer l'ergonomie d'un logiciel interactif. Concepts de base de l'ergonomie du logiciel et des interactions personne-machine : modèles, principes et lignes directrices; introduction à la conception d'interfaces utilisateur : processus, outils, méthodologie et normes; outils de développement d'interfaces graphiques : utilisation des contrôles et des objets prédéfinis, propriétés, méthodes et gestion des événements; évaluation des interfaces : test, enquête et expérimentation. Ce cours comporte des exercices en Java.
INF1035 Concepts avancés en objet (INF1004) Amener l'étudiant à comprendre les mécanismes du développement orienté-objet. Maîtriser les concepts relatifs au paradigme objet. Utiliser un environnement de développement (IDE). Utiliser le paradigme de programmation événementielle. Utiliser les principes (et mécanismes) de la programmation par contrat. Intégrer la programmation aspect. Etude des notions importantes de la programmation orientée-objet : héritage simple et multiple, hiérarchie des classes, polymorphisme, notion de liaison statique et de liaison dynamique, etc. Notion d'interface et de classe abstraite. Notion d'extension de classes. Généricité. Pattern de conception (GoF). Refactoring. Notions de robustesse et de sécurité dans les applications. Programmation événementielle : événements, messages, gestion des exceptions. Programmation par contrats. Programmation aspect : notions d'aspect, de poincut, de point de jointure et d'advice. Les langages utilisés dans ce cours sont C#, Java et AspectJ (à titre comparatif). Les environnements de développement sont les plateformes Eclipse et Visuel C#. Le cours comporte 18 heures d'atelier.
PIF1005 Mathématiques pour informaticiens I Ce cours vise à introduire les concepts mathématiques fondamentaux en informatique. Rappels mathématiques : calcul avec les nombres réels, inégalités, logarithmes; théorie des ensembles : relations, fonctions, relations d'ordre; logique : techniques de preuve; algèbre booléenne ; graphes; induction mathématique.
PIF1006 Mathématiques pour informaticiens II (PIF1005) Ce cours vise à compléter la formation de base en mathématiques en vue d'applications en informatique. Algèbre matricielle : opérations, déterminant et matrice inverse; concepts d'analyse numérique : représentation des nombres et erreur, interpolation et approximation; langages formels : langage et grammaire, machine à états finis avec et sans sorties , équivalence d'automates, automate fini non déterministe, expression régulière, machine de Turing; cryptographie : schéma de cryptage, authentification, identification, cryptographie à clé secrète, cryptographie à clé publique; codage et compression de données : techniques de compression, compression sans perte (code de Hoffman), compression avec perte (compression JPEG). Ce cours comporte des travaux avec le logiciel Matlab.
SIF1015 Systèmes d'exploitation L'étudiant se familiarise avec les concepts fondamentaux des systèmes d'exploitation : structure générale d'un système d'exploitation, gestion des différents sous-systèmes : processus/thread, communication inter-processus/thread, systèmes de fichiers, accès réseau, gestion de la mémoire. Gestion des processus et des threads; gestion des entrées/sorties tels que les dispositifs Windows; communication inter-processus : tubes anonymes et nommés, files de messages, sockets, signaux; introduction aux principes de fonctionnement d'un système de fichiers; introduction aux concepts de la gestion de la mémoire; introduction à la communication réseau par sockets. Les étudiants expérimentent les concepts théoriques par des projets de développement d'utilitaires dans un environnement de développement ouvert sous une plateforme telle que UNIX/LINUX/ANDROID. Règlement pédagogique particulier : Pour les étudiants du baccalauréat en génie électrique (concentration génie informatique) (7144) le préalable est GEI1072 Résolution de problèmes d'ingénierie en C. Pour les étudiants du baccalauréat en informatique (7833) les préalables sont INF1004 Structures de données et algorithmes et SIF1053 Architecture des ordinateurs.
SIF1053 Architecture des ordinateurs L'étudiant prendra connaissance des éléments fondamentaux des architectures et des composantes des ordinateurs modernes tant statiques que mobiles (ex : architectures ARM, X86, x86-64), des organes périphériques. Etude des composantes des ordinateurs modernes: mémoire, circuits et représentation de l'information. Unité de commande, représentation des instructions machine, notions d'adressage, notions de microprogrammation et machine virtuelle. Unité arithmétique et logiques. Introduction des notions de communication série et parallèle.
SMI1001 Bases de données I Le cours vise à donner une solide introduction tant théorique que pratique aux concepts informatiques fondamentaux ayant trait aux bases de données, particulièrement aux bases de données relationnelles. Outre la modélisation des données qui constitue une partie importante de ce cours, l'apprentissage du langage SQL et d'un SGBD (Système de Gestion de Bases de Données) moderne seront également des objectifs importants de ce cours. Introduction aux bases de données : modèles et langages, les différents utilisateurs et leurs besoins, structure et architecture des SGBD. Le modèle Entité-Relation, modélisation UML. Le modèle relationnel : aperçu de l'algèbre et du calcul relationnel, notion de vue. Le langage SQL, aperçu d'autres langages relationnels. Les contraintes d'intégrité, les données manquantes et les valeurs nulles. La conception des bases de données relationnelles, dépendances fonctionnelles, dépendances multivaluées, dépendances de jointure, normalisation, formes normales 1FN, 2FN, 3FN, FNBC, 4FN et 5FN. Autres types de bases de données : relationnelles-objets et multidimensionnelles. Introduction aux données multimédias et XML. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'utilitaire TOAD. Le cours comporte 18 heures d'atelier.
SMI1002 Bases de données II (SMI1001) Le cours porte principalement sur des considérations techniques sous-jacentes à l'utilisation ou à la conception des SGBD, toujours dans le contexte du SGBD Oracle qui sert d'illustration et de contexte de mise en pratique des concepts. L'étudiant aura donc l'opportunité d'approfondir sa compréhension du fonctionnement interne d'un SGBD, notamment de Oracle, et d'autres aspects complémentaires associés à l'exploitation des données. Stockage et structures de fichiers, indexation et fonctions de hachage. Traitement et optimisation des requêtes. Traitement des transactions. Contrôle de la concurrence. Systèmes de recouvrement. Sécurité, contrôle des accès et encryptage. Bases de données et applications Web, modèles client-serveur et multitiers. Architectures des SGBD, bases de données parallèles et distribuées. Analyses des données, OLAP (on-line analytical processing), entreposage (warehousing) et forage (mining) de données. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'interface JSP (Java Sever Page).
STT1001 Probabilités et statistiques Statistiques de base en vue des applications. Séries statistiques : histogramme et polygone. Mesures de tendance centrale. Mesures de dispersion. Moments. Eléments de probabilités : variables aléatoires, distributions binomiales, hypergéométriques, normales. Poisson. Introduction à l'échantillonnage. Tests d'hypothèses simples.
TIN1003 Science, technologie et société (2 crédits) Identifier les effets inducteurs et destructeurs des innovations scientifiques et technologiques sur la société contemporaine; provoquer une réflexion critique sur la viabilité sociale des technologies nouvelles; préparer les étudiants à accepter la responsabilité sociale qui incombe à la future « intelligence technique supérieure ». Introduire aux thèmes principaux de la philosophie de la technique en étudiant les visages multiples de la technologie moderne et en examinant ses rapports avec les différentes dimensions impliquées dans le concept « qualité de vie ». Présenter une méthodologie pour l'analyse de risque : formes de risque (physiques, personnels, sociaux), méthodes d'évaluation de choix technologiques et de détermination de la viabilité sociale de ces technologies. Proposer et discuter des modèles de prises de décision dans l'allocation de ressources technologiques et l'implantation de technologies nouvelles (avec applications particulières à l'informatique, la robotique, etc.). Identifier les principes fondamentaux devant être respectés dans l'implantation de ces technologies. Circonscrire la fonction nouvelle et la responsabilité sociales de l'ingénieur. Règlement pédagogique particulier : Pour s'inscrire à ce cours, l'étudiant en informatique doit avoir réussi 60 crédits du programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
Cours optionnels (21 crédits)
L’étudiant doit suivre les cours suivants (12 crédits) : INF1011 Génie logiciel (INF1007) Familiariser l'étudiant avec les concepts et principes fondamentaux du génie logiciel et le sensibiliser à leur importance dans la production de logiciels de qualité. Amener l'étudiant à une compréhension des principes de base de l'assurance qualité. Principes et concepts fondamentaux du Génie Logiciel. Produit logiciel: caractéristiques. Processus de génie logiciel. Modèles de cycle de vie. Prototypage. Normes. Maturité des processus. Processus léger. Méthodes Agiles. Réutilisation de logiciel. Concepts favorisant la réutilisation - Pattern, COO, paradigme aspect. Entités réutilisable - lignes de produits logiciels, composants, produits COTS. Assurance qualité logiciel : Principes et Techniques. Processus de validation et de vérification : définition, rôles, techniques, impact sur la qualité, etc. Processus de test : techniques et stratégies. Planification, conception et réalisation des tests. Techniques de revues, Preuves, etc. Concepts et principes de la qualité. Contrôle de la qualité : qualité et métriques. Gestion de projets. Maintenance. Réingénierie. Documentation technique.INF1020 Commerce électronique Ce cours a comme objectif principal l'initiation aux concepts de base des affaires et du commerce électronique et leur mise en pratique dans la réalisation d'un projet de commerce électronique. Le cours a aussi comme objectifs secondaires : d'apprendre à gérer un projet d'équipe en informatique. Aperçu du commerce électronique; la "digitalisation" des affaires; les processus et stratégies B2B (business-to-business); le rôle des intermédiaires indépendants (third parties); l'environnement régulateur; EDI, e-commerce et Internet; risques des systèmes non-sécuritaires; risques de gestion; normes, protocoles et langages Internet; cryptographie et authentification; murs coupe-feu (firewalls); mécanismes de paiement en ligne pour le e-commerce; agents intelligents; le marketing sur le Web; autres sujets d'actualité en affaires et en commerce électronique. Règlement pédagogique particulier : Pour s'inscrire au cours INF1020 Commerce électronique, les étudiants inscrits au cheminement DEC-BAC (7533) doivent avoir réussi les cours obligatoires de la première session. Les étudiants inscrits au double baccalauréat : mathématiques et informatique (6833) ou inscrits au double baccalauréat en physique et en informatique (6925) doivent avoir réussi les cours obligatoires des cinq (5) premières sessions.
INF1030 Introduction au développement d'applications mobiles (version Android) (INF1005 ou INF1035) Dans ce cours, l'étudiant sera amené à comprendre le cycle de développement d'applications mobiles. Utilisant le langage Java, les étudiants pourront créer des programmes tant standalone que déployés sur des plateformes mobiles. L'emphase sera mise sur les apprentissages des meilleurs pratiques de développement d'application mobiles et ce dans le but de faciliter et d'augmenter l'efficacité de ce développement. Les étudiants pourront aussi comprendre le fonctionnement de la machine virtuelle Dalvik comme plateforme pour le développement d'applications Android.
INF1031 Développement d'applications mobiles avancées (version Android) (INF1030) A partir de notions acquises dans le cours Introduction au développement d'applications mobiles (INF1030), ce cours permet aux étudiants de développer leurs compétences en développement d'applications mobiles avancées et ce dans des domaines divers comme les sciences, le commerce, la santé, le divertissement, etc. De plus, les étudiants seront amenés à mieux comprendre le développement d'applications verticales impliquant des notions d'architecture multi-tiers, de connectivité réseau. De sécurité, etc.
L'étudiant doit suivre deux ou trois cours (6 ou 9 crédits) parmi les cours d'informatique suivants : INF1021 Les architectures réparties (INF1009) Ce cours permet d'acquérir des connaissances sur les systèmes répartis. Il permet aux étudiants de s'initier aux méthodes de conception et de réalisation des applications informatiques réparties. À la fin du cours, les étudiants seront capables de comparer plusieurs méthodes de réalisation de systèmes répartis. Utilisation des SOCKETS : rappel sur le protocole TCP; interface Java de manipulation des sockets (Java.net); réalisation d'applications clients serveurs. Utilisation de Java RMI : introduction à RMI (Remote Method Invocation); implémentation des objets, côté client et côté serveur. Introduction à CORBA : évolution vers les applications distribuées; protocole RPC (Remote Procedure Calls); norme CORBA; implémentation du client et de l'objet distribué CORBA. Agents intelligents : concept d'agent; agents coopératifs, rationnels, adaptatifs, mobiles; agents informationnels intelligents; agents pour le Web; sécurité, mobilité, aspects algorithmiques. XML (eXtensible Markup Language) : SGML, HTML, XML et le Web; EDI et XML pour les applications d'affaires électroniques; définitions de nouveaux langages basés sur XML; technologies et applications XML; protocoles de communication basés sur le XML.
INF1032 Introduction au développement d'applications mobiles (plateforme IOS) (INF1005 ou INF1035) Dans ce cours, l'étudiant sera amené à comprendre le cycle de développement d'applications mobile. Utilisant le langage Objective C, les étudiants pourront créer des programmes tant standalone que déployés sur des plateformes mobiles. L'emphase sera mise sur les apprentissages des meilleurs pratiques de développement d'application mobiles et ce dans le but de faciliter et d'augmenter l'efficacité de ce développement. Les étudiants pourront aussi apprendre comment développer des applications sur des plateformes mobiles IOS (ex : IPhone et IPad).
INF1036 Sujets spéciaux en TI Développement de logiciel : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en développement de logiciel et qui ne sont pas nécessairement vues ou approfondies dans le programme. Développement d'applications mobiles : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en développement d'applications mobiles et qui ne sont pas nécessairement vues ou approfondies dans le programme. Science des données : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en science des données et qui ne sont pas nécessairement vues ou approfondies dans le programme. Cybersécurité et infonuagique : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en cybersécurité et infonuagique et qui ne sont pas nécessairement vues ou approfondies dans le programme. Règlement pédagogique particulier associé au cours : Pour s'inscrire au cours INF1036 Sujets spéciaux en TI, la personne étudiante inscrite au baccalauréat en informatique (7833 ou 7533) doit avoir réussi obligatoirement 45 crédits du programme. Pour s'inscrire au cours INF1036 Sujets spéciaux en TI, la personne étudiante inscrite au double baccalauréat en mathématiques et en informatique (6722) doit avoir réussi obligatoirement 75 crédits du programme. Pour s'inscrire au cours INF1036 Sujets spéciaux en TI, la personne étudiante inscrite au double baccalauréat en physique et en informatique (6925) doit avoir réussi obligatoirement 75 crédits du programme.
SIF1032 Graphisme par ordinateur (MAP1006 ou PIF1006; INF1004) L'étudiant se familiarise avec les algorithmes fondamentaux du graphisme : représentation des objets 2D et 3D. Il est amené à comprendre les concepts de transformation linéaire en coordonnées homogènes, la composition des transformations et le calcul matriciel, la transformation en perspective, les modèles de réflexion de la lumière, la couleur, l'illumination et le rendu, l'ajout de texture. Création de modèles d'objets simples, formes polygonales; création de modèles plus complexes à l'aide de moteurs de formes; application de transformations 3D pour la visualisation et les déplacements d'objets 3D; introduction aux notions de réalisme d'une scène : illumination, couleur, propriétés des objets : texture, transparence. Le cours comporte des projets pratiques d'animation réalisés en langage C, en langage C++ à l'aide des libraires graphiques OpenGl et DirectX
L'étudiant peut suivre un cours (0 ou 3 crédits) parmi les cours d'informatique des cheminements (01), (03) et (04). CSE1001 Introduction à la cybersécurité (INF1001; INF1004) Ce cours permettra à l’étudiant de prendre conscience des problématiques et des enjeux critiques en cybersécurité. L’étudiant pourra se familiariser avec les concepts de base et acquérir les connaissances essentielles dans divers domaines d’expertise de la cybersécurité. Il aura l’occasion d’explorer les différentes techniques permettant de sécuriser les données. Ce cours aborde principalement les volets suivants: Enjeux, Modèles de sécurité, Triade CIA, Identification des actifs informationnels et analyse de risque, Cybermenaces et mécanismes de cyberdéfense, Étude des vulnérabilités, exploitation et contre-mesures, Hachage, Cryptosystèmes, Protocoles cryptographiques, Spécification des politiques de sécurité, Modèles de contrôle d’accès, Authentification.
INF1012 Élaboration et gestion de projets scientifiques (INF1011) Identifier et analyser les conséquences de l'innovation technologique et de la recherche et développement en sciences. Acquérir des connaissances et des techniques de travail en situation de projets informatiques. Développer l'aptitude à planifier de tels projets, à y participer et, éventuellement, à les gérer. Développer l'habileté à gérer son temps et celui de ses collaborateurs. Se familiariser à la dimension internationale de la gestion des projets. Les différentes formes d'innovation technologique. Évaluation des impacts positifs et négatifs de l'innovation technologique et de la recherche et développement en sciences : étude coût/bénéfice, impact sur les individus, la communauté scientifique et la société. Gestion de projets informatiques : identification des objectifs et définition du projet, élaboration de solutions à caractère scientifique, planification des activités, échéanciers; choix de l'équipe, attribution des responsabilités; importance de la coordination en environnement de projet; suivi des activités et gestion du temps; progiciels de gestion de projets.
INF1013 Environnement de développement et composantes logicielles (INF1005 ou INF1035; SIF1015) Compléter la formation des étudiants en lien avec les méthodologies et technologies de développement des applications Frame/Web d'envergure. Apprendre à construire des composants réutilisables en s'appuyant sur des bibliothèques existantes. Réaliser les applications Web et Frame selon les modèles MVC/MVP ainsi que des Application Serveur sous forme d'APE RESTFUL. Utiliser et configurer des environnements de développement pour de grands projets logiciels. Maîtriser les gestionnaires de dépendances de projets. Open Source/Propriétaires. Quelques-unes des technologies importantes seront utilisées : C# - ASP.Net, Java-JSP, Python-DJANGO, Ruby-Rails, GWT, ANGULAR, REACT, Maven, Gradle, etc.
INF1018 Analyse de programmes (INF1035) Présenter à l'étudiant les principes et les techniques de base de l'implantation des langages de programmation. L'initier à l'évaluation des langages de programmation et à l'analyse de programmes. Familiariser l'étudiant avec certains outils de description et d'analyse des langages de programmation. Étude des langages de programmation dans l'optique de construction d'outils d'environnement de programmation. Concepts fondamentaux des langages de programmation modernes. Classification et évaluation des langages de programmation. Concepts et critères de qualité. Syntaxe et sémantique des langages de programmation. Méthodes de description formelles. Grammaire et Langages. Méthodes d'analyse lexicale et syntaxique : principes, approches et applications. Outils pour le traitement des langages. Analyse sémantique. Introduction à la génération et à l'optimisation de code. Éléments d'analyse de programmes en langages évolués : statique, dynamique, dépendances, etc.
PRO1027 Programmation scientifique en C (INF1002 ou PRO1026) Approfondir les concepts fondamentaux de la conception et de la production de logiciel. Développer l'habileté à réaliser des logiciels de qualité. Réaliser des applications pratiques dans le domaine des méthodes numériques. Étude des langages C et C++. Qualité des programmes : clarté, lisibilité, modifiabilité, efficacité, facilité d'usage, robustesse. Programmation modulaire. Programmation en langage C ou C++. A titre indicatif, les applications sont choisies parmi les suivantes : statistiques, manipulation de matrices, résolution de systèmes d'équations linéaires, interpolation, approximation, dérivation et intégration numériques.
SDD1001 Introduction à la science des données Ce cours aborde les langages modernes utilisés en sciences des données comme Python, les bibliothèques de statistiques, de calcul symbolique ainsi que leurs applications. Les langages seront abordés dans les paradigmes orientés objets et fonctionnels.
SDD1002 Modélisation et simulation (STT1001; PIF1005) Ce cours aborde les différentes techniques théoriques et pratiques de simulation, de modélisation, et de visualisation, des données. L'étudiant sera amené à explorer plusieurs outils utilisés dans les sciences des données. Ce cours aborde aussi les notions liées à la généralisation: sous-ajustement, sur-ajustement, validation croisée. Approches: classification, régression, agrégation (clustering). Principaux éléments: Outils de simulation, de visualisation et manipulation de données comme Python ou R ou Orange, ou Tableau, autre.
SIF1033 Traitement d'image (INF1004; STT1001 ou STT1042) Amener l'étudiant à pouvoir utiliser l'ordinateur pour traiter une image de façon à en améliorer la perception visuelle et à permettre la détection d'objets significatifs. Présentation des notions de base du traitement de l'image : correction géométrique et radiométrique des images, amélioration du contraste, amélioration des images par filtrage spatial isotropique et anisotropique, spectral et morphologique; segmentation des images par seuillage; détection des arêtes et des contours, détection des droites et des formes circulaires, détection des objets par corrélation spatiale; génération d'images tomographiques; applications Client/Serveur permettant le traitement d'image à distance; protocoles de transfert d'images. Les étudiants expérimentent les concepts du traitement des images par des projets pratiques codés en langage C ou en langage C++.
Cours complémentaires (9 crédits)
L'étudiant doit suivre trois cours complémentaires (9 crédits) parmi les suivants. Certains cours sont offerts en ligne. Consulter la liste.Science des données
(Cheminement: 3) À moins d'indication contraire, un cours comporte trois (3) crédits.Cours obligatoires (60 crédits)
INF1001 Programmation Web Permettre à l'étudiant de s'initier aux concepts du Web. A travers des exemples détaillés, l'étudiant apprend à créer et à publier des sites Web en exploitant les nouvelles technologies du Web. Il se familiarise avec les langages de programmation propres au Web. Principaux éléments du Web; langage de balisage, conception de page Web, validation, organisation et gestion d'un site Web, programmation coté client et coté serveur, introduction à XML. Technologies : HTML, CSS, DOM, JavaScript, php. Ce cours utilise les langages HTML, JavaScript, VbScript, XML et l'outil de conception de pages Web EditPlus.INF1002 Introduction à la programmation objet Permettre à l'étudiant de se familiariser avec l'informatique comme discipline et surtout à la programmation impérative et orientée objet. Présentation des structures de commandes, des types, des objets, des structures de données élémentaires (tableau, chaîne de caractères); mécanismes de structuration d'applications : sous-programmes, notions de classe, d'objet, d'application; développement d'applications : choix des données et des algorithmes, codification, compilation, exécution, mise au point de classes et d'applications. Introduction à l'informatique; outils de construction d'application : syntaxe et sémantique d'un langage de haut niveau; variables, types, expressions, affectation; entrée-sortie élémentaire; structures de sélection et d'itération : sous-programmes et passage de paramètres : introduction au paradigme objet : notions de classe, d'objet, d'état et de méthode, d'héritage; algorithmes et résolution de problèmes (problem-solving) : stratégies de solution de problèmes, rôles de l'algorithme dans la résolution de problèmes; stratégies d'implantation; structure de données de base : tableaux, chaînes de caractères; stratégie de vérification : conception de points-tests. Ce cours utilise le langage de programmation Java sur la plate-forme Eclipse. Il comporte 18 heures d'atelier.
INF1004 Structures de données et algorithmes (INF1002) Permettre à l'étudiant de se familiariser avec les structures de données classiques et les algorithmes qui leur sont associés; réaliser des implantations statiques et dynamiques de ces structures : faire l'évaluation de la complexité spatiale et temporelle dans les cas simples; étudier la récursion et la comparer avec l'itération. Revue des concepts élémentaires de programmation; bases de la programmation Objet: encapsulation, dissimulation de l'information; séparation du comportement et de l'implantation; héritage et polymorphisme; conception par héritage et par composition; utilisation de fichiers; les principales structures de données: liste, pile, file, table d'adressage dispersé, arbre, graphe; implantation statique et dynamique; les algorithmes de fouille, de tri, les fonctions de hachage et les stratégies de traitement des collisions, parcours d'arbres et de graphes; le concept de récursion : les fonctions mathématiques récursives; comparaison avec les fonctions itératives correspondantes; implantation de récursion à l'aide de piles; analyse élémentaire de la complexité des algorithmes: complexité spatiale et complexité temporelle; notation "grand O", comportement du meilleur cas, du cas moyen et du pire cas; principales classes de complexité d'algorithmes; stratégies de test pour les classes et les applications. Ce cours utilise le langage de programmation Java et la plateforme Eclipse.
INF1006 Analyse et modélisation (INF1004) Familiariser l'étudiant avec le processus de développement de systèmes informatiques, et plus particulièrement avec les phases initiales. L'initier à l'exercice de l'analyse des besoins, à la spécification et à la modélisation des systèmes ainsi qu'à l'évaluation de ces étapes. Explorer les fondements et l'évolution des méthodes d'analyse. Processus de développement et activités initiales: analyse des besoins et spécifications; importance de l'analyse dans le processus de développement; étude détaillée et application d'une méthode (UML); différentes étapes du processus: analyse des besoins, formalisation et validation; analyse et modélisation orientées objet; outils GLAO (CASE) de modélisation; dossier des spécifications et des exigences d'un logiciel; normes, critères de qualité de la spécification; revue technique; réalisation d'un dossier de spécifications. Le cours comporte 12 heures d'atelier.
INF1007 Conception de logiciels (INF1006) Initier l'étudiant au processus de conception et le sensibiliser à ses difficultés et à son importance. Procéder à l'étude détaillée et à l'application d'une méthode. Permettre à l'étudiant d'élaborer des solutions de qualité. Problématique du processus de conception. Importance de la conception dans le processus de développement. Processus de conception : principes, méthode et notation. Étude détaillée et application d'une méthode. Différentes étapes du processus. Conception et styles d'architectures logicielles. Patrons de conception (GRASP). Qualité de la conception : élaboration de solutions réutilisables, maintenables, extensibles, etc. Conception orientée objet. Caractéristiques d'une bonne conception détaillée (modularité, abstraction, cohésion, couplage, etc.). Outils d'aide à la conception. Documentation de la conception. Revue de la conception. Réalisation d'un projet.
INF1008 Analyse et conception d'algorithmes (ALG1001 ou PIF1005; INF1004) L'étudiant développera son habileté à produire des algorithmes corrects et efficaces. Il pourra analyser la complexité spatiale et temporelle d'un algorithme. Il entrera en contact avec différentes classes d'algorithmes et s'habituera à choisir le type d'algorithme qui convient le mieux à un problème donné. Définition d'un algorithme et de sa complexité. Notations asymptotiques. Résolution de récurrence. Étude d'efficacité et de complexité d'algorithmes de tri. Stratégies de conception d'algorithmes : algorithmes voraces, diviser-pour-régner, programmation dynamique, algorithmes probabilistes, exploration de graphes. Études de cas.
INF1009 Réseaux d'ordinateurs I (SIF1015) Le but du cours est de fournir les bases indispensables à la compréhension des architectures des réseaux informatiques qui permettent l'échange des données entre ordinateurs. Il précise le fonctionnement des réseaux : architecture en couches, protocoles. Étant donné que la connaissance du domaine est compliquée par la richesse du vocabulaire, on présente progressivement les notions et le vocabulaire à l'aide d'exemples simples. Une première partie présente les aspects liés à la transmission des informations : circuits de données, protocoles de liaison, réseaux à circuits virtuels. Une fois les principes présentés, on détaille le formalisme des sept couches OSI : concepts, description du modèle. Une troisième partie est consacrée aux réseaux locaux (Ethernet, Token Ring, Sans fil). Finalement, on explique les principes des réseaux IP.
INF1010 Réseaux d'ordinateurs II (INF1009) Ce cours permet aux étudiants de se familiariser avec les concepts et les contraintes des nouvelles technologies de l'information et des communications. Présentation des spécificités du réseau Internet : services, protocoles, applications, administration; introduction à la gestion sécurisée de l'information et aux techniques et mécanismes de sécurité informatique. Ce cours offre la possibilité aux étudiants de définir, de spécifier et de réaliser des applications clients serveurs sur le réseau Internet et de faire de l'administration de quelques services TCP/IP (DHCP, DNS,…) et des outils réseaux (Switch, routeur,..).
INF1014 Aspects juridiques de l'informatique (1 crédit) L'étudiant se familiarise avec les aspects juridiques de l'informatique. Il apprend à connaître les principales lois touchant la pratique de l'informatique. Il développe l'habileté à analyser des situations de travail de façon à éviter les problèmes juridiques. Notions juridiques : juridiction et territorialité, droit civil et droit pénal. Principales lois touchant la pratique de l'informatique : le droit d'auteur, le respect de la vie privée dans les secteurs public et privé, l'accès à l'information, le cadre juridique des technologies de l'information. Les aspects légaux des licences de produits informatiques. Les aspects légaux particuliers à l'Internet. Règlements pédagogiques particuliers : Pour s'inscrire aux cours TIN1003 Science, technologie et société et INF1014 Aspects juridiques de l'informatique, l'étudiant en informatique doit avoir complété 60 crédits dans le programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
INF1015 Stage d'informatique I L'objectif du cours Stage d'informatique I est de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1015 Stage d'informatique I, l'étudiant doit avoir réussi obligatoirement 45 crédits du programme.
INF1016 Stage d'informatique II Les objectifs du cours Stage d'informatique II sont de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail et de parfaire l'acquisition des méthodes de travail propres à l'informatique. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant en informatique doit avoir réussi obligatoirement 60 crédits du programme et le cours INF1015 Stage d'informatique I. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours GMA1001 Stages. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en physique et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours INF1015 Stage d'informatique I.
INF1034 Introduction aux interfaces utilisateur (INF1002) Amener l'étudiant à comprendre le comportement humain dans son interaction avec un environnement logiciel interactif, à développer une interface utilisateur simple et à évaluer l'ergonomie d'un logiciel interactif. Concepts de base de l'ergonomie du logiciel et des interactions personne-machine : modèles, principes et lignes directrices; introduction à la conception d'interfaces utilisateur : processus, outils, méthodologie et normes; outils de développement d'interfaces graphiques : utilisation des contrôles et des objets prédéfinis, propriétés, méthodes et gestion des événements; évaluation des interfaces : test, enquête et expérimentation. Ce cours comporte des exercices en Java.
INF1035 Concepts avancés en objet (INF1004) Amener l'étudiant à comprendre les mécanismes du développement orienté-objet. Maîtriser les concepts relatifs au paradigme objet. Utiliser un environnement de développement (IDE). Utiliser le paradigme de programmation événementielle. Utiliser les principes (et mécanismes) de la programmation par contrat. Intégrer la programmation aspect. Etude des notions importantes de la programmation orientée-objet : héritage simple et multiple, hiérarchie des classes, polymorphisme, notion de liaison statique et de liaison dynamique, etc. Notion d'interface et de classe abstraite. Notion d'extension de classes. Généricité. Pattern de conception (GoF). Refactoring. Notions de robustesse et de sécurité dans les applications. Programmation événementielle : événements, messages, gestion des exceptions. Programmation par contrats. Programmation aspect : notions d'aspect, de poincut, de point de jointure et d'advice. Les langages utilisés dans ce cours sont C#, Java et AspectJ (à titre comparatif). Les environnements de développement sont les plateformes Eclipse et Visuel C#. Le cours comporte 18 heures d'atelier.
PIF1005 Mathématiques pour informaticiens I Ce cours vise à introduire les concepts mathématiques fondamentaux en informatique. Rappels mathématiques : calcul avec les nombres réels, inégalités, logarithmes; théorie des ensembles : relations, fonctions, relations d'ordre; logique : techniques de preuve; algèbre booléenne ; graphes; induction mathématique.
PIF1006 Mathématiques pour informaticiens II (PIF1005) Ce cours vise à compléter la formation de base en mathématiques en vue d'applications en informatique. Algèbre matricielle : opérations, déterminant et matrice inverse; concepts d'analyse numérique : représentation des nombres et erreur, interpolation et approximation; langages formels : langage et grammaire, machine à états finis avec et sans sorties , équivalence d'automates, automate fini non déterministe, expression régulière, machine de Turing; cryptographie : schéma de cryptage, authentification, identification, cryptographie à clé secrète, cryptographie à clé publique; codage et compression de données : techniques de compression, compression sans perte (code de Hoffman), compression avec perte (compression JPEG). Ce cours comporte des travaux avec le logiciel Matlab.
SIF1015 Systèmes d'exploitation L'étudiant se familiarise avec les concepts fondamentaux des systèmes d'exploitation : structure générale d'un système d'exploitation, gestion des différents sous-systèmes : processus/thread, communication inter-processus/thread, systèmes de fichiers, accès réseau, gestion de la mémoire. Gestion des processus et des threads; gestion des entrées/sorties tels que les dispositifs Windows; communication inter-processus : tubes anonymes et nommés, files de messages, sockets, signaux; introduction aux principes de fonctionnement d'un système de fichiers; introduction aux concepts de la gestion de la mémoire; introduction à la communication réseau par sockets. Les étudiants expérimentent les concepts théoriques par des projets de développement d'utilitaires dans un environnement de développement ouvert sous une plateforme telle que UNIX/LINUX/ANDROID. Règlement pédagogique particulier : Pour les étudiants du baccalauréat en génie électrique (concentration génie informatique) (7144) le préalable est GEI1072 Résolution de problèmes d'ingénierie en C. Pour les étudiants du baccalauréat en informatique (7833) les préalables sont INF1004 Structures de données et algorithmes et SIF1053 Architecture des ordinateurs.
SIF1053 Architecture des ordinateurs L'étudiant prendra connaissance des éléments fondamentaux des architectures et des composantes des ordinateurs modernes tant statiques que mobiles (ex : architectures ARM, X86, x86-64), des organes périphériques. Etude des composantes des ordinateurs modernes: mémoire, circuits et représentation de l'information. Unité de commande, représentation des instructions machine, notions d'adressage, notions de microprogrammation et machine virtuelle. Unité arithmétique et logiques. Introduction des notions de communication série et parallèle.
SMI1001 Bases de données I Le cours vise à donner une solide introduction tant théorique que pratique aux concepts informatiques fondamentaux ayant trait aux bases de données, particulièrement aux bases de données relationnelles. Outre la modélisation des données qui constitue une partie importante de ce cours, l'apprentissage du langage SQL et d'un SGBD (Système de Gestion de Bases de Données) moderne seront également des objectifs importants de ce cours. Introduction aux bases de données : modèles et langages, les différents utilisateurs et leurs besoins, structure et architecture des SGBD. Le modèle Entité-Relation, modélisation UML. Le modèle relationnel : aperçu de l'algèbre et du calcul relationnel, notion de vue. Le langage SQL, aperçu d'autres langages relationnels. Les contraintes d'intégrité, les données manquantes et les valeurs nulles. La conception des bases de données relationnelles, dépendances fonctionnelles, dépendances multivaluées, dépendances de jointure, normalisation, formes normales 1FN, 2FN, 3FN, FNBC, 4FN et 5FN. Autres types de bases de données : relationnelles-objets et multidimensionnelles. Introduction aux données multimédias et XML. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'utilitaire TOAD. Le cours comporte 18 heures d'atelier.
SMI1002 Bases de données II (SMI1001) Le cours porte principalement sur des considérations techniques sous-jacentes à l'utilisation ou à la conception des SGBD, toujours dans le contexte du SGBD Oracle qui sert d'illustration et de contexte de mise en pratique des concepts. L'étudiant aura donc l'opportunité d'approfondir sa compréhension du fonctionnement interne d'un SGBD, notamment de Oracle, et d'autres aspects complémentaires associés à l'exploitation des données. Stockage et structures de fichiers, indexation et fonctions de hachage. Traitement et optimisation des requêtes. Traitement des transactions. Contrôle de la concurrence. Systèmes de recouvrement. Sécurité, contrôle des accès et encryptage. Bases de données et applications Web, modèles client-serveur et multitiers. Architectures des SGBD, bases de données parallèles et distribuées. Analyses des données, OLAP (on-line analytical processing), entreposage (warehousing) et forage (mining) de données. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'interface JSP (Java Sever Page).
STT1001 Probabilités et statistiques Statistiques de base en vue des applications. Séries statistiques : histogramme et polygone. Mesures de tendance centrale. Mesures de dispersion. Moments. Eléments de probabilités : variables aléatoires, distributions binomiales, hypergéométriques, normales. Poisson. Introduction à l'échantillonnage. Tests d'hypothèses simples.
TIN1003 Science, technologie et société (2 crédits) Identifier les effets inducteurs et destructeurs des innovations scientifiques et technologiques sur la société contemporaine; provoquer une réflexion critique sur la viabilité sociale des technologies nouvelles; préparer les étudiants à accepter la responsabilité sociale qui incombe à la future « intelligence technique supérieure ». Introduire aux thèmes principaux de la philosophie de la technique en étudiant les visages multiples de la technologie moderne et en examinant ses rapports avec les différentes dimensions impliquées dans le concept « qualité de vie ». Présenter une méthodologie pour l'analyse de risque : formes de risque (physiques, personnels, sociaux), méthodes d'évaluation de choix technologiques et de détermination de la viabilité sociale de ces technologies. Proposer et discuter des modèles de prises de décision dans l'allocation de ressources technologiques et l'implantation de technologies nouvelles (avec applications particulières à l'informatique, la robotique, etc.). Identifier les principes fondamentaux devant être respectés dans l'implantation de ces technologies. Circonscrire la fonction nouvelle et la responsabilité sociales de l'ingénieur. Règlement pédagogique particulier : Pour s'inscrire à ce cours, l'étudiant en informatique doit avoir réussi 60 crédits du programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
Cours optionnels (21 crédits)
L’étudiant doit suivre les cours suivants (12 crédits) : SDD1001 Introduction à la science des données Ce cours aborde les langages modernes utilisés en sciences des données comme Python, les bibliothèques de statistiques, de calcul symbolique ainsi que leurs applications. Les langages seront abordés dans les paradigmes orientés objets et fonctionnels.SDD1002 Modélisation et simulation (STT1001; PIF1005) Ce cours aborde les différentes techniques théoriques et pratiques de simulation, de modélisation, et de visualisation, des données. L'étudiant sera amené à explorer plusieurs outils utilisés dans les sciences des données. Ce cours aborde aussi les notions liées à la généralisation: sous-ajustement, sur-ajustement, validation croisée. Approches: classification, régression, agrégation (clustering). Principaux éléments: Outils de simulation, de visualisation et manipulation de données comme Python ou R ou Orange, ou Tableau, autre.
SDD1003 Gestion des entrepôts de données (SMI1002; INF1004) Les bases de données non relationnelles n’incorporent pas le modèle table/clé que les systèmes de gestion de base de données relationnelles promeuvent. Ce cours permet à l’étudiant de comprendre, de modéliser et de manipuler les données de masse à l’aide des nouvelles technologies de Bases de données (BD) non relationnelles. Aussi, l’étudiant sera introduit à comment lire et manipuler les données des bases de données non relationnelles dans des applications web. L’architecture des données et l’optimisation des requêtes seront également abordées. Les exemples de base de données abordées sont les Bases de données documents et les Bases de données clé-valeur.
SDD1004 Apprentissage Automatique et applications (SDD1002) Cadre théorique et pratique des algorithmes d'apprentissage automatique (comme machine à vecteurs de support (SVM)) entraînement, validation. Introduction à la modélisation et aux algorithmes d'apprentissage machine basée sur les données (apprentissage par l'exemple). Algorithmes: voisin le plus proche (comme KNN), régression linéaire et linéaire généralisée, mixtures de Gaussiennes, processus Gaussien, méthodes de noyaux. Introduction à l'apprentissage profond.
L’étudiant doit suivre deux ou trois cours (6 ou 9 crédits) parmi les cours d’informatique suivants: INF1020 Commerce électronique Ce cours a comme objectif principal l'initiation aux concepts de base des affaires et du commerce électronique et leur mise en pratique dans la réalisation d'un projet de commerce électronique. Le cours a aussi comme objectifs secondaires : d'apprendre à gérer un projet d'équipe en informatique. Aperçu du commerce électronique; la "digitalisation" des affaires; les processus et stratégies B2B (business-to-business); le rôle des intermédiaires indépendants (third parties); l'environnement régulateur; EDI, e-commerce et Internet; risques des systèmes non-sécuritaires; risques de gestion; normes, protocoles et langages Internet; cryptographie et authentification; murs coupe-feu (firewalls); mécanismes de paiement en ligne pour le e-commerce; agents intelligents; le marketing sur le Web; autres sujets d'actualité en affaires et en commerce électronique. Règlement pédagogique particulier : Pour s'inscrire au cours INF1020 Commerce électronique, les étudiants inscrits au cheminement DEC-BAC (7533) doivent avoir réussi les cours obligatoires de la première session. Les étudiants inscrits au double baccalauréat : mathématiques et informatique (6833) ou inscrits au double baccalauréat en physique et en informatique (6925) doivent avoir réussi les cours obligatoires des cinq (5) premières sessions.
INF1021 Les architectures réparties (INF1009) Ce cours permet d'acquérir des connaissances sur les systèmes répartis. Il permet aux étudiants de s'initier aux méthodes de conception et de réalisation des applications informatiques réparties. À la fin du cours, les étudiants seront capables de comparer plusieurs méthodes de réalisation de systèmes répartis. Utilisation des SOCKETS : rappel sur le protocole TCP; interface Java de manipulation des sockets (Java.net); réalisation d'applications clients serveurs. Utilisation de Java RMI : introduction à RMI (Remote Method Invocation); implémentation des objets, côté client et côté serveur. Introduction à CORBA : évolution vers les applications distribuées; protocole RPC (Remote Procedure Calls); norme CORBA; implémentation du client et de l'objet distribué CORBA. Agents intelligents : concept d'agent; agents coopératifs, rationnels, adaptatifs, mobiles; agents informationnels intelligents; agents pour le Web; sécurité, mobilité, aspects algorithmiques. XML (eXtensible Markup Language) : SGML, HTML, XML et le Web; EDI et XML pour les applications d'affaires électroniques; définitions de nouveaux langages basés sur XML; technologies et applications XML; protocoles de communication basés sur le XML.
INF1030 Introduction au développement d'applications mobiles (version Android) (INF1005 ou INF1035) Dans ce cours, l'étudiant sera amené à comprendre le cycle de développement d'applications mobiles. Utilisant le langage Java, les étudiants pourront créer des programmes tant standalone que déployés sur des plateformes mobiles. L'emphase sera mise sur les apprentissages des meilleurs pratiques de développement d'application mobiles et ce dans le but de faciliter et d'augmenter l'efficacité de ce développement. Les étudiants pourront aussi comprendre le fonctionnement de la machine virtuelle Dalvik comme plateforme pour le développement d'applications Android.
INF1036 Sujets spéciaux en TI Développement de logiciel : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en développement de logiciel et qui ne sont pas nécessairement vues ou approfondies dans le programme. Développement d'applications mobiles : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en développement d'applications mobiles et qui ne sont pas nécessairement vues ou approfondies dans le programme. Science des données : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en science des données et qui ne sont pas nécessairement vues ou approfondies dans le programme. Cybersécurité et infonuagique : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en cybersécurité et infonuagique et qui ne sont pas nécessairement vues ou approfondies dans le programme. Règlement pédagogique particulier associé au cours : Pour s'inscrire au cours INF1036 Sujets spéciaux en TI, la personne étudiante inscrite au baccalauréat en informatique (7833 ou 7533) doit avoir réussi obligatoirement 45 crédits du programme. Pour s'inscrire au cours INF1036 Sujets spéciaux en TI, la personne étudiante inscrite au double baccalauréat en mathématiques et en informatique (6722) doit avoir réussi obligatoirement 75 crédits du programme. Pour s'inscrire au cours INF1036 Sujets spéciaux en TI, la personne étudiante inscrite au double baccalauréat en physique et en informatique (6925) doit avoir réussi obligatoirement 75 crédits du programme.
SDD1005 Probabilité & Inférence (SDD1002 ou STT1001 ou STT1042) Ce cours aborde les différentes techniques théoriques et pratiques de la décision, Files d'attente, chaînes de Markov et réseaux Bayésiens.
SIF1033 Traitement d'image (INF1004; STT1001 ou STT1042) Amener l'étudiant à pouvoir utiliser l'ordinateur pour traiter une image de façon à en améliorer la perception visuelle et à permettre la détection d'objets significatifs. Présentation des notions de base du traitement de l'image : correction géométrique et radiométrique des images, amélioration du contraste, amélioration des images par filtrage spatial isotropique et anisotropique, spectral et morphologique; segmentation des images par seuillage; détection des arêtes et des contours, détection des droites et des formes circulaires, détection des objets par corrélation spatiale; génération d'images tomographiques; applications Client/Serveur permettant le traitement d'image à distance; protocoles de transfert d'images. Les étudiants expérimentent les concepts du traitement des images par des projets pratiques codés en langage C ou en langage C++.
L’étudiant peut suivre un cours (3 crédits) parmi les cours d’informatique des cheminements (01), (02) et (04) suivants : CSE1001 Introduction à la cybersécurité (INF1001; INF1004) Ce cours permettra à l’étudiant de prendre conscience des problématiques et des enjeux critiques en cybersécurité. L’étudiant pourra se familiariser avec les concepts de base et acquérir les connaissances essentielles dans divers domaines d’expertise de la cybersécurité. Il aura l’occasion d’explorer les différentes techniques permettant de sécuriser les données. Ce cours aborde principalement les volets suivants: Enjeux, Modèles de sécurité, Triade CIA, Identification des actifs informationnels et analyse de risque, Cybermenaces et mécanismes de cyberdéfense, Étude des vulnérabilités, exploitation et contre-mesures, Hachage, Cryptosystèmes, Protocoles cryptographiques, Spécification des politiques de sécurité, Modèles de contrôle d’accès, Authentification.
INF1011 Génie logiciel (INF1007) Familiariser l'étudiant avec les concepts et principes fondamentaux du génie logiciel et le sensibiliser à leur importance dans la production de logiciels de qualité. Amener l'étudiant à une compréhension des principes de base de l'assurance qualité. Principes et concepts fondamentaux du Génie Logiciel. Produit logiciel: caractéristiques. Processus de génie logiciel. Modèles de cycle de vie. Prototypage. Normes. Maturité des processus. Processus léger. Méthodes Agiles. Réutilisation de logiciel. Concepts favorisant la réutilisation - Pattern, COO, paradigme aspect. Entités réutilisable - lignes de produits logiciels, composants, produits COTS. Assurance qualité logiciel : Principes et Techniques. Processus de validation et de vérification : définition, rôles, techniques, impact sur la qualité, etc. Processus de test : techniques et stratégies. Planification, conception et réalisation des tests. Techniques de revues, Preuves, etc. Concepts et principes de la qualité. Contrôle de la qualité : qualité et métriques. Gestion de projets. Maintenance. Réingénierie. Documentation technique.
INF1012 Élaboration et gestion de projets scientifiques (INF1011) Identifier et analyser les conséquences de l'innovation technologique et de la recherche et développement en sciences. Acquérir des connaissances et des techniques de travail en situation de projets informatiques. Développer l'aptitude à planifier de tels projets, à y participer et, éventuellement, à les gérer. Développer l'habileté à gérer son temps et celui de ses collaborateurs. Se familiariser à la dimension internationale de la gestion des projets. Les différentes formes d'innovation technologique. Évaluation des impacts positifs et négatifs de l'innovation technologique et de la recherche et développement en sciences : étude coût/bénéfice, impact sur les individus, la communauté scientifique et la société. Gestion de projets informatiques : identification des objectifs et définition du projet, élaboration de solutions à caractère scientifique, planification des activités, échéanciers; choix de l'équipe, attribution des responsabilités; importance de la coordination en environnement de projet; suivi des activités et gestion du temps; progiciels de gestion de projets.
INF1013 Environnement de développement et composantes logicielles (INF1005 ou INF1035; SIF1015) Compléter la formation des étudiants en lien avec les méthodologies et technologies de développement des applications Frame/Web d'envergure. Apprendre à construire des composants réutilisables en s'appuyant sur des bibliothèques existantes. Réaliser les applications Web et Frame selon les modèles MVC/MVP ainsi que des Application Serveur sous forme d'APE RESTFUL. Utiliser et configurer des environnements de développement pour de grands projets logiciels. Maîtriser les gestionnaires de dépendances de projets. Open Source/Propriétaires. Quelques-unes des technologies importantes seront utilisées : C# - ASP.Net, Java-JSP, Python-DJANGO, Ruby-Rails, GWT, ANGULAR, REACT, Maven, Gradle, etc.
INF1018 Analyse de programmes (INF1035) Présenter à l'étudiant les principes et les techniques de base de l'implantation des langages de programmation. L'initier à l'évaluation des langages de programmation et à l'analyse de programmes. Familiariser l'étudiant avec certains outils de description et d'analyse des langages de programmation. Étude des langages de programmation dans l'optique de construction d'outils d'environnement de programmation. Concepts fondamentaux des langages de programmation modernes. Classification et évaluation des langages de programmation. Concepts et critères de qualité. Syntaxe et sémantique des langages de programmation. Méthodes de description formelles. Grammaire et Langages. Méthodes d'analyse lexicale et syntaxique : principes, approches et applications. Outils pour le traitement des langages. Analyse sémantique. Introduction à la génération et à l'optimisation de code. Éléments d'analyse de programmes en langages évolués : statique, dynamique, dépendances, etc.
INF1032 Introduction au développement d'applications mobiles (plateforme IOS) (INF1005 ou INF1035) Dans ce cours, l'étudiant sera amené à comprendre le cycle de développement d'applications mobile. Utilisant le langage Objective C, les étudiants pourront créer des programmes tant standalone que déployés sur des plateformes mobiles. L'emphase sera mise sur les apprentissages des meilleurs pratiques de développement d'application mobiles et ce dans le but de faciliter et d'augmenter l'efficacité de ce développement. Les étudiants pourront aussi apprendre comment développer des applications sur des plateformes mobiles IOS (ex : IPhone et IPad).
PRO1027 Programmation scientifique en C (INF1002 ou PRO1026) Approfondir les concepts fondamentaux de la conception et de la production de logiciel. Développer l'habileté à réaliser des logiciels de qualité. Réaliser des applications pratiques dans le domaine des méthodes numériques. Étude des langages C et C++. Qualité des programmes : clarté, lisibilité, modifiabilité, efficacité, facilité d'usage, robustesse. Programmation modulaire. Programmation en langage C ou C++. A titre indicatif, les applications sont choisies parmi les suivantes : statistiques, manipulation de matrices, résolution de systèmes d'équations linéaires, interpolation, approximation, dérivation et intégration numériques.
SIF1032 Graphisme par ordinateur (MAP1006 ou PIF1006; INF1004) L'étudiant se familiarise avec les algorithmes fondamentaux du graphisme : représentation des objets 2D et 3D. Il est amené à comprendre les concepts de transformation linéaire en coordonnées homogènes, la composition des transformations et le calcul matriciel, la transformation en perspective, les modèles de réflexion de la lumière, la couleur, l'illumination et le rendu, l'ajout de texture. Création de modèles d'objets simples, formes polygonales; création de modèles plus complexes à l'aide de moteurs de formes; application de transformations 3D pour la visualisation et les déplacements d'objets 3D; introduction aux notions de réalisme d'une scène : illumination, couleur, propriétés des objets : texture, transparence. Le cours comporte des projets pratiques d'animation réalisés en langage C, en langage C++ à l'aide des libraires graphiques OpenGl et DirectX
Cours complémentaires (9 crédits)
L'étudiant doit suivre trois cours complémentaires (9 crédits) parmi les suivants. Consulter la liste.Cybersécurité et infonuagique
(Cheminement: 4) À moins d'indication contraire, un cours comporte trois (3) crédits.Cours obligatoires (60 crédits)
INF1001 Programmation Web Permettre à l'étudiant de s'initier aux concepts du Web. A travers des exemples détaillés, l'étudiant apprend à créer et à publier des sites Web en exploitant les nouvelles technologies du Web. Il se familiarise avec les langages de programmation propres au Web. Principaux éléments du Web; langage de balisage, conception de page Web, validation, organisation et gestion d'un site Web, programmation coté client et coté serveur, introduction à XML. Technologies : HTML, CSS, DOM, JavaScript, php. Ce cours utilise les langages HTML, JavaScript, VbScript, XML et l'outil de conception de pages Web EditPlus.INF1002 Introduction à la programmation objet Permettre à l'étudiant de se familiariser avec l'informatique comme discipline et surtout à la programmation impérative et orientée objet. Présentation des structures de commandes, des types, des objets, des structures de données élémentaires (tableau, chaîne de caractères); mécanismes de structuration d'applications : sous-programmes, notions de classe, d'objet, d'application; développement d'applications : choix des données et des algorithmes, codification, compilation, exécution, mise au point de classes et d'applications. Introduction à l'informatique; outils de construction d'application : syntaxe et sémantique d'un langage de haut niveau; variables, types, expressions, affectation; entrée-sortie élémentaire; structures de sélection et d'itération : sous-programmes et passage de paramètres : introduction au paradigme objet : notions de classe, d'objet, d'état et de méthode, d'héritage; algorithmes et résolution de problèmes (problem-solving) : stratégies de solution de problèmes, rôles de l'algorithme dans la résolution de problèmes; stratégies d'implantation; structure de données de base : tableaux, chaînes de caractères; stratégie de vérification : conception de points-tests. Ce cours utilise le langage de programmation Java sur la plate-forme Eclipse. Il comporte 18 heures d'atelier.
INF1004 Structures de données et algorithmes (INF1002) Permettre à l'étudiant de se familiariser avec les structures de données classiques et les algorithmes qui leur sont associés; réaliser des implantations statiques et dynamiques de ces structures : faire l'évaluation de la complexité spatiale et temporelle dans les cas simples; étudier la récursion et la comparer avec l'itération. Revue des concepts élémentaires de programmation; bases de la programmation Objet: encapsulation, dissimulation de l'information; séparation du comportement et de l'implantation; héritage et polymorphisme; conception par héritage et par composition; utilisation de fichiers; les principales structures de données: liste, pile, file, table d'adressage dispersé, arbre, graphe; implantation statique et dynamique; les algorithmes de fouille, de tri, les fonctions de hachage et les stratégies de traitement des collisions, parcours d'arbres et de graphes; le concept de récursion : les fonctions mathématiques récursives; comparaison avec les fonctions itératives correspondantes; implantation de récursion à l'aide de piles; analyse élémentaire de la complexité des algorithmes: complexité spatiale et complexité temporelle; notation "grand O", comportement du meilleur cas, du cas moyen et du pire cas; principales classes de complexité d'algorithmes; stratégies de test pour les classes et les applications. Ce cours utilise le langage de programmation Java et la plateforme Eclipse.
INF1006 Analyse et modélisation (INF1004) Familiariser l'étudiant avec le processus de développement de systèmes informatiques, et plus particulièrement avec les phases initiales. L'initier à l'exercice de l'analyse des besoins, à la spécification et à la modélisation des systèmes ainsi qu'à l'évaluation de ces étapes. Explorer les fondements et l'évolution des méthodes d'analyse. Processus de développement et activités initiales: analyse des besoins et spécifications; importance de l'analyse dans le processus de développement; étude détaillée et application d'une méthode (UML); différentes étapes du processus: analyse des besoins, formalisation et validation; analyse et modélisation orientées objet; outils GLAO (CASE) de modélisation; dossier des spécifications et des exigences d'un logiciel; normes, critères de qualité de la spécification; revue technique; réalisation d'un dossier de spécifications. Le cours comporte 12 heures d'atelier.
INF1007 Conception de logiciels (INF1006) Initier l'étudiant au processus de conception et le sensibiliser à ses difficultés et à son importance. Procéder à l'étude détaillée et à l'application d'une méthode. Permettre à l'étudiant d'élaborer des solutions de qualité. Problématique du processus de conception. Importance de la conception dans le processus de développement. Processus de conception : principes, méthode et notation. Étude détaillée et application d'une méthode. Différentes étapes du processus. Conception et styles d'architectures logicielles. Patrons de conception (GRASP). Qualité de la conception : élaboration de solutions réutilisables, maintenables, extensibles, etc. Conception orientée objet. Caractéristiques d'une bonne conception détaillée (modularité, abstraction, cohésion, couplage, etc.). Outils d'aide à la conception. Documentation de la conception. Revue de la conception. Réalisation d'un projet.
INF1008 Analyse et conception d'algorithmes (ALG1001 ou PIF1005; INF1004) L'étudiant développera son habileté à produire des algorithmes corrects et efficaces. Il pourra analyser la complexité spatiale et temporelle d'un algorithme. Il entrera en contact avec différentes classes d'algorithmes et s'habituera à choisir le type d'algorithme qui convient le mieux à un problème donné. Définition d'un algorithme et de sa complexité. Notations asymptotiques. Résolution de récurrence. Étude d'efficacité et de complexité d'algorithmes de tri. Stratégies de conception d'algorithmes : algorithmes voraces, diviser-pour-régner, programmation dynamique, algorithmes probabilistes, exploration de graphes. Études de cas.
INF1009 Réseaux d'ordinateurs I (SIF1015) Le but du cours est de fournir les bases indispensables à la compréhension des architectures des réseaux informatiques qui permettent l'échange des données entre ordinateurs. Il précise le fonctionnement des réseaux : architecture en couches, protocoles. Étant donné que la connaissance du domaine est compliquée par la richesse du vocabulaire, on présente progressivement les notions et le vocabulaire à l'aide d'exemples simples. Une première partie présente les aspects liés à la transmission des informations : circuits de données, protocoles de liaison, réseaux à circuits virtuels. Une fois les principes présentés, on détaille le formalisme des sept couches OSI : concepts, description du modèle. Une troisième partie est consacrée aux réseaux locaux (Ethernet, Token Ring, Sans fil). Finalement, on explique les principes des réseaux IP.
INF1010 Réseaux d'ordinateurs II (INF1009) Ce cours permet aux étudiants de se familiariser avec les concepts et les contraintes des nouvelles technologies de l'information et des communications. Présentation des spécificités du réseau Internet : services, protocoles, applications, administration; introduction à la gestion sécurisée de l'information et aux techniques et mécanismes de sécurité informatique. Ce cours offre la possibilité aux étudiants de définir, de spécifier et de réaliser des applications clients serveurs sur le réseau Internet et de faire de l'administration de quelques services TCP/IP (DHCP, DNS,…) et des outils réseaux (Switch, routeur,..).
INF1014 Aspects juridiques de l'informatique (1 crédit) L'étudiant se familiarise avec les aspects juridiques de l'informatique. Il apprend à connaître les principales lois touchant la pratique de l'informatique. Il développe l'habileté à analyser des situations de travail de façon à éviter les problèmes juridiques. Notions juridiques : juridiction et territorialité, droit civil et droit pénal. Principales lois touchant la pratique de l'informatique : le droit d'auteur, le respect de la vie privée dans les secteurs public et privé, l'accès à l'information, le cadre juridique des technologies de l'information. Les aspects légaux des licences de produits informatiques. Les aspects légaux particuliers à l'Internet. Règlements pédagogiques particuliers : Pour s'inscrire aux cours TIN1003 Science, technologie et société et INF1014 Aspects juridiques de l'informatique, l'étudiant en informatique doit avoir complété 60 crédits dans le programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
INF1015 Stage d'informatique I L'objectif du cours Stage d'informatique I est de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1015 Stage d'informatique I, l'étudiant doit avoir réussi obligatoirement 45 crédits du programme.
INF1016 Stage d'informatique II Les objectifs du cours Stage d'informatique II sont de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail et de parfaire l'acquisition des méthodes de travail propres à l'informatique. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant en informatique doit avoir réussi obligatoirement 60 crédits du programme et le cours INF1015 Stage d'informatique I. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours GMA1001 Stages. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en physique et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours INF1015 Stage d'informatique I.
INF1034 Introduction aux interfaces utilisateur (INF1002) Amener l'étudiant à comprendre le comportement humain dans son interaction avec un environnement logiciel interactif, à développer une interface utilisateur simple et à évaluer l'ergonomie d'un logiciel interactif. Concepts de base de l'ergonomie du logiciel et des interactions personne-machine : modèles, principes et lignes directrices; introduction à la conception d'interfaces utilisateur : processus, outils, méthodologie et normes; outils de développement d'interfaces graphiques : utilisation des contrôles et des objets prédéfinis, propriétés, méthodes et gestion des événements; évaluation des interfaces : test, enquête et expérimentation. Ce cours comporte des exercices en Java.
INF1035 Concepts avancés en objet (INF1004) Amener l'étudiant à comprendre les mécanismes du développement orienté-objet. Maîtriser les concepts relatifs au paradigme objet. Utiliser un environnement de développement (IDE). Utiliser le paradigme de programmation événementielle. Utiliser les principes (et mécanismes) de la programmation par contrat. Intégrer la programmation aspect. Etude des notions importantes de la programmation orientée-objet : héritage simple et multiple, hiérarchie des classes, polymorphisme, notion de liaison statique et de liaison dynamique, etc. Notion d'interface et de classe abstraite. Notion d'extension de classes. Généricité. Pattern de conception (GoF). Refactoring. Notions de robustesse et de sécurité dans les applications. Programmation événementielle : événements, messages, gestion des exceptions. Programmation par contrats. Programmation aspect : notions d'aspect, de poincut, de point de jointure et d'advice. Les langages utilisés dans ce cours sont C#, Java et AspectJ (à titre comparatif). Les environnements de développement sont les plateformes Eclipse et Visuel C#. Le cours comporte 18 heures d'atelier.
PIF1005 Mathématiques pour informaticiens I Ce cours vise à introduire les concepts mathématiques fondamentaux en informatique. Rappels mathématiques : calcul avec les nombres réels, inégalités, logarithmes; théorie des ensembles : relations, fonctions, relations d'ordre; logique : techniques de preuve; algèbre booléenne ; graphes; induction mathématique.
PIF1006 Mathématiques pour informaticiens II (PIF1005) Ce cours vise à compléter la formation de base en mathématiques en vue d'applications en informatique. Algèbre matricielle : opérations, déterminant et matrice inverse; concepts d'analyse numérique : représentation des nombres et erreur, interpolation et approximation; langages formels : langage et grammaire, machine à états finis avec et sans sorties , équivalence d'automates, automate fini non déterministe, expression régulière, machine de Turing; cryptographie : schéma de cryptage, authentification, identification, cryptographie à clé secrète, cryptographie à clé publique; codage et compression de données : techniques de compression, compression sans perte (code de Hoffman), compression avec perte (compression JPEG). Ce cours comporte des travaux avec le logiciel Matlab.
SIF1015 Systèmes d'exploitation L'étudiant se familiarise avec les concepts fondamentaux des systèmes d'exploitation : structure générale d'un système d'exploitation, gestion des différents sous-systèmes : processus/thread, communication inter-processus/thread, systèmes de fichiers, accès réseau, gestion de la mémoire. Gestion des processus et des threads; gestion des entrées/sorties tels que les dispositifs Windows; communication inter-processus : tubes anonymes et nommés, files de messages, sockets, signaux; introduction aux principes de fonctionnement d'un système de fichiers; introduction aux concepts de la gestion de la mémoire; introduction à la communication réseau par sockets. Les étudiants expérimentent les concepts théoriques par des projets de développement d'utilitaires dans un environnement de développement ouvert sous une plateforme telle que UNIX/LINUX/ANDROID. Règlement pédagogique particulier : Pour les étudiants du baccalauréat en génie électrique (concentration génie informatique) (7144) le préalable est GEI1072 Résolution de problèmes d'ingénierie en C. Pour les étudiants du baccalauréat en informatique (7833) les préalables sont INF1004 Structures de données et algorithmes et SIF1053 Architecture des ordinateurs.
SIF1053 Architecture des ordinateurs L'étudiant prendra connaissance des éléments fondamentaux des architectures et des composantes des ordinateurs modernes tant statiques que mobiles (ex : architectures ARM, X86, x86-64), des organes périphériques. Etude des composantes des ordinateurs modernes: mémoire, circuits et représentation de l'information. Unité de commande, représentation des instructions machine, notions d'adressage, notions de microprogrammation et machine virtuelle. Unité arithmétique et logiques. Introduction des notions de communication série et parallèle.
SMI1001 Bases de données I Le cours vise à donner une solide introduction tant théorique que pratique aux concepts informatiques fondamentaux ayant trait aux bases de données, particulièrement aux bases de données relationnelles. Outre la modélisation des données qui constitue une partie importante de ce cours, l'apprentissage du langage SQL et d'un SGBD (Système de Gestion de Bases de Données) moderne seront également des objectifs importants de ce cours. Introduction aux bases de données : modèles et langages, les différents utilisateurs et leurs besoins, structure et architecture des SGBD. Le modèle Entité-Relation, modélisation UML. Le modèle relationnel : aperçu de l'algèbre et du calcul relationnel, notion de vue. Le langage SQL, aperçu d'autres langages relationnels. Les contraintes d'intégrité, les données manquantes et les valeurs nulles. La conception des bases de données relationnelles, dépendances fonctionnelles, dépendances multivaluées, dépendances de jointure, normalisation, formes normales 1FN, 2FN, 3FN, FNBC, 4FN et 5FN. Autres types de bases de données : relationnelles-objets et multidimensionnelles. Introduction aux données multimédias et XML. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'utilitaire TOAD. Le cours comporte 18 heures d'atelier.
SMI1002 Bases de données II (SMI1001) Le cours porte principalement sur des considérations techniques sous-jacentes à l'utilisation ou à la conception des SGBD, toujours dans le contexte du SGBD Oracle qui sert d'illustration et de contexte de mise en pratique des concepts. L'étudiant aura donc l'opportunité d'approfondir sa compréhension du fonctionnement interne d'un SGBD, notamment de Oracle, et d'autres aspects complémentaires associés à l'exploitation des données. Stockage et structures de fichiers, indexation et fonctions de hachage. Traitement et optimisation des requêtes. Traitement des transactions. Contrôle de la concurrence. Systèmes de recouvrement. Sécurité, contrôle des accès et encryptage. Bases de données et applications Web, modèles client-serveur et multitiers. Architectures des SGBD, bases de données parallèles et distribuées. Analyses des données, OLAP (on-line analytical processing), entreposage (warehousing) et forage (mining) de données. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'interface JSP (Java Sever Page).
STT1001 Probabilités et statistiques Statistiques de base en vue des applications. Séries statistiques : histogramme et polygone. Mesures de tendance centrale. Mesures de dispersion. Moments. Eléments de probabilités : variables aléatoires, distributions binomiales, hypergéométriques, normales. Poisson. Introduction à l'échantillonnage. Tests d'hypothèses simples.
TIN1003 Science, technologie et société (2 crédits) Identifier les effets inducteurs et destructeurs des innovations scientifiques et technologiques sur la société contemporaine; provoquer une réflexion critique sur la viabilité sociale des technologies nouvelles; préparer les étudiants à accepter la responsabilité sociale qui incombe à la future « intelligence technique supérieure ». Introduire aux thèmes principaux de la philosophie de la technique en étudiant les visages multiples de la technologie moderne et en examinant ses rapports avec les différentes dimensions impliquées dans le concept « qualité de vie ». Présenter une méthodologie pour l'analyse de risque : formes de risque (physiques, personnels, sociaux), méthodes d'évaluation de choix technologiques et de détermination de la viabilité sociale de ces technologies. Proposer et discuter des modèles de prises de décision dans l'allocation de ressources technologiques et l'implantation de technologies nouvelles (avec applications particulières à l'informatique, la robotique, etc.). Identifier les principes fondamentaux devant être respectés dans l'implantation de ces technologies. Circonscrire la fonction nouvelle et la responsabilité sociales de l'ingénieur. Règlement pédagogique particulier : Pour s'inscrire à ce cours, l'étudiant en informatique doit avoir réussi 60 crédits du programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
Cours optionnels (21 crédits)
L’étudiant doit suivre les cours suivants (9 crédits) : CSE1001 Introduction à la cybersécurité (INF1001; INF1004) Ce cours permettra à l’étudiant de prendre conscience des problématiques et des enjeux critiques en cybersécurité. L’étudiant pourra se familiariser avec les concepts de base et acquérir les connaissances essentielles dans divers domaines d’expertise de la cybersécurité. Il aura l’occasion d’explorer les différentes techniques permettant de sécuriser les données. Ce cours aborde principalement les volets suivants: Enjeux, Modèles de sécurité, Triade CIA, Identification des actifs informationnels et analyse de risque, Cybermenaces et mécanismes de cyberdéfense, Étude des vulnérabilités, exploitation et contre-mesures, Hachage, Cryptosystèmes, Protocoles cryptographiques, Spécification des politiques de sécurité, Modèles de contrôle d’accès, Authentification.CSE1002 Sécurité des logiciels (CSE1001; INF1007) Ce cours présente les principaux aspects de la sécurité applicative. Il sera question d’étudier et de détecter les diverses failles ciblant les composantes logicielles et de comprendre les exploits associés. L’objectif est d’estimer la gravité des menaces potentielles et d’envisager les contre-mesures adéquates afin de réduire la surface d’exposition aux attaques. L’intégration de la sécurité des logiciels sera également réalisée d’une manière intrinsèque dès la phase de conception (Security By Design). Ce cours aborde principalement les volets suivants: Vulnérabilités et menaces, Sécurité des applications web, Maliciels, Intégration de la sécurité dans le cycle de vie logiciel, Codage sécurisé.
CSE1003 Sécurité des réseaux (CSE1001; INF1010) Ce cours permettra à l’étudiant de comprendre les problèmes de sécurité qui menacent les réseaux. L’étudiant aura l’occasion de découvrir les vulnérabilités ainsi que les attaques qui ciblent les protocoles de communication. Afin de proposer une stratégie sécurisant les infrastructures réseaux, il sera question d’étudier une panoplie de contre-mesures et de mécanismes de sécurité. Ce cours aborde principalement les volets suivants: Fondements des réseaux, Vulnérabilités et cybermenaces, Normes de sécurité des réseaux, Spécification des politiques de sécurité, Mécanismes de défense, Contrôle d’accès, Analyse de paquets, Prévention des intrusions, Détection des intrusions, Gestion des évènements.
L’étudiant doit suivre trois ou quatre cours (9 ou 12 crédits) parmi les cours d’informatique suivants: INF1011 Génie logiciel (INF1007) Familiariser l'étudiant avec les concepts et principes fondamentaux du génie logiciel et le sensibiliser à leur importance dans la production de logiciels de qualité. Amener l'étudiant à une compréhension des principes de base de l'assurance qualité. Principes et concepts fondamentaux du Génie Logiciel. Produit logiciel: caractéristiques. Processus de génie logiciel. Modèles de cycle de vie. Prototypage. Normes. Maturité des processus. Processus léger. Méthodes Agiles. Réutilisation de logiciel. Concepts favorisant la réutilisation - Pattern, COO, paradigme aspect. Entités réutilisable - lignes de produits logiciels, composants, produits COTS. Assurance qualité logiciel : Principes et Techniques. Processus de validation et de vérification : définition, rôles, techniques, impact sur la qualité, etc. Processus de test : techniques et stratégies. Planification, conception et réalisation des tests. Techniques de revues, Preuves, etc. Concepts et principes de la qualité. Contrôle de la qualité : qualité et métriques. Gestion de projets. Maintenance. Réingénierie. Documentation technique.
INF1013 Environnement de développement et composantes logicielles (INF1005 ou INF1035; SIF1015) Compléter la formation des étudiants en lien avec les méthodologies et technologies de développement des applications Frame/Web d'envergure. Apprendre à construire des composants réutilisables en s'appuyant sur des bibliothèques existantes. Réaliser les applications Web et Frame selon les modèles MVC/MVP ainsi que des Application Serveur sous forme d'APE RESTFUL. Utiliser et configurer des environnements de développement pour de grands projets logiciels. Maîtriser les gestionnaires de dépendances de projets. Open Source/Propriétaires. Quelques-unes des technologies importantes seront utilisées : C# - ASP.Net, Java-JSP, Python-DJANGO, Ruby-Rails, GWT, ANGULAR, REACT, Maven, Gradle, etc.
INF1018 Analyse de programmes (INF1035) Présenter à l'étudiant les principes et les techniques de base de l'implantation des langages de programmation. L'initier à l'évaluation des langages de programmation et à l'analyse de programmes. Familiariser l'étudiant avec certains outils de description et d'analyse des langages de programmation. Étude des langages de programmation dans l'optique de construction d'outils d'environnement de programmation. Concepts fondamentaux des langages de programmation modernes. Classification et évaluation des langages de programmation. Concepts et critères de qualité. Syntaxe et sémantique des langages de programmation. Méthodes de description formelles. Grammaire et Langages. Méthodes d'analyse lexicale et syntaxique : principes, approches et applications. Outils pour le traitement des langages. Analyse sémantique. Introduction à la génération et à l'optimisation de code. Éléments d'analyse de programmes en langages évolués : statique, dynamique, dépendances, etc.
INF1020 Commerce électronique Ce cours a comme objectif principal l'initiation aux concepts de base des affaires et du commerce électronique et leur mise en pratique dans la réalisation d'un projet de commerce électronique. Le cours a aussi comme objectifs secondaires : d'apprendre à gérer un projet d'équipe en informatique. Aperçu du commerce électronique; la "digitalisation" des affaires; les processus et stratégies B2B (business-to-business); le rôle des intermédiaires indépendants (third parties); l'environnement régulateur; EDI, e-commerce et Internet; risques des systèmes non-sécuritaires; risques de gestion; normes, protocoles et langages Internet; cryptographie et authentification; murs coupe-feu (firewalls); mécanismes de paiement en ligne pour le e-commerce; agents intelligents; le marketing sur le Web; autres sujets d'actualité en affaires et en commerce électronique. Règlement pédagogique particulier : Pour s'inscrire au cours INF1020 Commerce électronique, les étudiants inscrits au cheminement DEC-BAC (7533) doivent avoir réussi les cours obligatoires de la première session. Les étudiants inscrits au double baccalauréat : mathématiques et informatique (6833) ou inscrits au double baccalauréat en physique et en informatique (6925) doivent avoir réussi les cours obligatoires des cinq (5) premières sessions.
INF1030 Introduction au développement d'applications mobiles (version Android) (INF1005 ou INF1035) Dans ce cours, l'étudiant sera amené à comprendre le cycle de développement d'applications mobiles. Utilisant le langage Java, les étudiants pourront créer des programmes tant standalone que déployés sur des plateformes mobiles. L'emphase sera mise sur les apprentissages des meilleurs pratiques de développement d'application mobiles et ce dans le but de faciliter et d'augmenter l'efficacité de ce développement. Les étudiants pourront aussi comprendre le fonctionnement de la machine virtuelle Dalvik comme plateforme pour le développement d'applications Android.
INF1036 Sujets spéciaux en TI Développement de logiciel : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en développement de logiciel et qui ne sont pas nécessairement vues ou approfondies dans le programme. Développement d'applications mobiles : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en développement d'applications mobiles et qui ne sont pas nécessairement vues ou approfondies dans le programme. Science des données : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en science des données et qui ne sont pas nécessairement vues ou approfondies dans le programme. Cybersécurité et infonuagique : Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en cybersécurité et infonuagique et qui ne sont pas nécessairement vues ou approfondies dans le programme. Règlement pédagogique particulier associé au cours : Pour s'inscrire au cours INF1036 Sujets spéciaux en TI, la personne étudiante inscrite au baccalauréat en informatique (7833 ou 7533) doit avoir réussi obligatoirement 45 crédits du programme. Pour s'inscrire au cours INF1036 Sujets spéciaux en TI, la personne étudiante inscrite au double baccalauréat en mathématiques et en informatique (6722) doit avoir réussi obligatoirement 75 crédits du programme. Pour s'inscrire au cours INF1036 Sujets spéciaux en TI, la personne étudiante inscrite au double baccalauréat en physique et en informatique (6925) doit avoir réussi obligatoirement 75 crédits du programme.
SDD1001 Introduction à la science des données Ce cours aborde les langages modernes utilisés en sciences des données comme Python, les bibliothèques de statistiques, de calcul symbolique ainsi que leurs applications. Les langages seront abordés dans les paradigmes orientés objets et fonctionnels.
L’étudiant peut suivre un cours (0 ou 3 crédits) parmi les cours d’informatique des cheminements (01), (02) et (03) suivants : INF1012 Élaboration et gestion de projets scientifiques (INF1011) Identifier et analyser les conséquences de l'innovation technologique et de la recherche et développement en sciences. Acquérir des connaissances et des techniques de travail en situation de projets informatiques. Développer l'aptitude à planifier de tels projets, à y participer et, éventuellement, à les gérer. Développer l'habileté à gérer son temps et celui de ses collaborateurs. Se familiariser à la dimension internationale de la gestion des projets. Les différentes formes d'innovation technologique. Évaluation des impacts positifs et négatifs de l'innovation technologique et de la recherche et développement en sciences : étude coût/bénéfice, impact sur les individus, la communauté scientifique et la société. Gestion de projets informatiques : identification des objectifs et définition du projet, élaboration de solutions à caractère scientifique, planification des activités, échéanciers; choix de l'équipe, attribution des responsabilités; importance de la coordination en environnement de projet; suivi des activités et gestion du temps; progiciels de gestion de projets.
INF1021 Les architectures réparties (INF1009) Ce cours permet d'acquérir des connaissances sur les systèmes répartis. Il permet aux étudiants de s'initier aux méthodes de conception et de réalisation des applications informatiques réparties. À la fin du cours, les étudiants seront capables de comparer plusieurs méthodes de réalisation de systèmes répartis. Utilisation des SOCKETS : rappel sur le protocole TCP; interface Java de manipulation des sockets (Java.net); réalisation d'applications clients serveurs. Utilisation de Java RMI : introduction à RMI (Remote Method Invocation); implémentation des objets, côté client et côté serveur. Introduction à CORBA : évolution vers les applications distribuées; protocole RPC (Remote Procedure Calls); norme CORBA; implémentation du client et de l'objet distribué CORBA. Agents intelligents : concept d'agent; agents coopératifs, rationnels, adaptatifs, mobiles; agents informationnels intelligents; agents pour le Web; sécurité, mobilité, aspects algorithmiques. XML (eXtensible Markup Language) : SGML, HTML, XML et le Web; EDI et XML pour les applications d'affaires électroniques; définitions de nouveaux langages basés sur XML; technologies et applications XML; protocoles de communication basés sur le XML.
INF1031 Développement d'applications mobiles avancées (version Android) (INF1030) A partir de notions acquises dans le cours Introduction au développement d'applications mobiles (INF1030), ce cours permet aux étudiants de développer leurs compétences en développement d'applications mobiles avancées et ce dans des domaines divers comme les sciences, le commerce, la santé, le divertissement, etc. De plus, les étudiants seront amenés à mieux comprendre le développement d'applications verticales impliquant des notions d'architecture multi-tiers, de connectivité réseau. De sécurité, etc.
PRO1027 Programmation scientifique en C (INF1002 ou PRO1026) Approfondir les concepts fondamentaux de la conception et de la production de logiciel. Développer l'habileté à réaliser des logiciels de qualité. Réaliser des applications pratiques dans le domaine des méthodes numériques. Étude des langages C et C++. Qualité des programmes : clarté, lisibilité, modifiabilité, efficacité, facilité d'usage, robustesse. Programmation modulaire. Programmation en langage C ou C++. A titre indicatif, les applications sont choisies parmi les suivantes : statistiques, manipulation de matrices, résolution de systèmes d'équations linéaires, interpolation, approximation, dérivation et intégration numériques.
SDD1002 Modélisation et simulation (STT1001; PIF1005) Ce cours aborde les différentes techniques théoriques et pratiques de simulation, de modélisation, et de visualisation, des données. L'étudiant sera amené à explorer plusieurs outils utilisés dans les sciences des données. Ce cours aborde aussi les notions liées à la généralisation: sous-ajustement, sur-ajustement, validation croisée. Approches: classification, régression, agrégation (clustering). Principaux éléments: Outils de simulation, de visualisation et manipulation de données comme Python ou R ou Orange, ou Tableau, autre.
SIF1033 Traitement d'image (INF1004; STT1001 ou STT1042) Amener l'étudiant à pouvoir utiliser l'ordinateur pour traiter une image de façon à en améliorer la perception visuelle et à permettre la détection d'objets significatifs. Présentation des notions de base du traitement de l'image : correction géométrique et radiométrique des images, amélioration du contraste, amélioration des images par filtrage spatial isotropique et anisotropique, spectral et morphologique; segmentation des images par seuillage; détection des arêtes et des contours, détection des droites et des formes circulaires, détection des objets par corrélation spatiale; génération d'images tomographiques; applications Client/Serveur permettant le traitement d'image à distance; protocoles de transfert d'images. Les étudiants expérimentent les concepts du traitement des images par des projets pratiques codés en langage C ou en langage C++.
Cours complémentaires (9 crédits)
L'étudiant doit suivre trois cours complémentaires (9 crédits) parmi les suivants. Consulter la liste.Développement de logiciels (DUAL)
(Cheminement: 5) À moins d'indication contraire, un cours comporte trois (3) crédits.Cours obligatoires (60 crédits)
INF1001 Programmation Web Permettre à l'étudiant de s'initier aux concepts du Web. A travers des exemples détaillés, l'étudiant apprend à créer et à publier des sites Web en exploitant les nouvelles technologies du Web. Il se familiarise avec les langages de programmation propres au Web. Principaux éléments du Web; langage de balisage, conception de page Web, validation, organisation et gestion d'un site Web, programmation coté client et coté serveur, introduction à XML. Technologies : HTML, CSS, DOM, JavaScript, php. Ce cours utilise les langages HTML, JavaScript, VbScript, XML et l'outil de conception de pages Web EditPlus.INF1002 Introduction à la programmation objet Permettre à l'étudiant de se familiariser avec l'informatique comme discipline et surtout à la programmation impérative et orientée objet. Présentation des structures de commandes, des types, des objets, des structures de données élémentaires (tableau, chaîne de caractères); mécanismes de structuration d'applications : sous-programmes, notions de classe, d'objet, d'application; développement d'applications : choix des données et des algorithmes, codification, compilation, exécution, mise au point de classes et d'applications. Introduction à l'informatique; outils de construction d'application : syntaxe et sémantique d'un langage de haut niveau; variables, types, expressions, affectation; entrée-sortie élémentaire; structures de sélection et d'itération : sous-programmes et passage de paramètres : introduction au paradigme objet : notions de classe, d'objet, d'état et de méthode, d'héritage; algorithmes et résolution de problèmes (problem-solving) : stratégies de solution de problèmes, rôles de l'algorithme dans la résolution de problèmes; stratégies d'implantation; structure de données de base : tableaux, chaînes de caractères; stratégie de vérification : conception de points-tests. Ce cours utilise le langage de programmation Java sur la plate-forme Eclipse. Il comporte 18 heures d'atelier.
INF1004 Structures de données et algorithmes (INF1002) Permettre à l'étudiant de se familiariser avec les structures de données classiques et les algorithmes qui leur sont associés; réaliser des implantations statiques et dynamiques de ces structures : faire l'évaluation de la complexité spatiale et temporelle dans les cas simples; étudier la récursion et la comparer avec l'itération. Revue des concepts élémentaires de programmation; bases de la programmation Objet: encapsulation, dissimulation de l'information; séparation du comportement et de l'implantation; héritage et polymorphisme; conception par héritage et par composition; utilisation de fichiers; les principales structures de données: liste, pile, file, table d'adressage dispersé, arbre, graphe; implantation statique et dynamique; les algorithmes de fouille, de tri, les fonctions de hachage et les stratégies de traitement des collisions, parcours d'arbres et de graphes; le concept de récursion : les fonctions mathématiques récursives; comparaison avec les fonctions itératives correspondantes; implantation de récursion à l'aide de piles; analyse élémentaire de la complexité des algorithmes: complexité spatiale et complexité temporelle; notation "grand O", comportement du meilleur cas, du cas moyen et du pire cas; principales classes de complexité d'algorithmes; stratégies de test pour les classes et les applications. Ce cours utilise le langage de programmation Java et la plateforme Eclipse.
INF1006 Analyse et modélisation (INF1004) Familiariser l'étudiant avec le processus de développement de systèmes informatiques, et plus particulièrement avec les phases initiales. L'initier à l'exercice de l'analyse des besoins, à la spécification et à la modélisation des systèmes ainsi qu'à l'évaluation de ces étapes. Explorer les fondements et l'évolution des méthodes d'analyse. Processus de développement et activités initiales: analyse des besoins et spécifications; importance de l'analyse dans le processus de développement; étude détaillée et application d'une méthode (UML); différentes étapes du processus: analyse des besoins, formalisation et validation; analyse et modélisation orientées objet; outils GLAO (CASE) de modélisation; dossier des spécifications et des exigences d'un logiciel; normes, critères de qualité de la spécification; revue technique; réalisation d'un dossier de spécifications. Le cours comporte 12 heures d'atelier.
INF1007 Conception de logiciels (INF1006) Initier l'étudiant au processus de conception et le sensibiliser à ses difficultés et à son importance. Procéder à l'étude détaillée et à l'application d'une méthode. Permettre à l'étudiant d'élaborer des solutions de qualité. Problématique du processus de conception. Importance de la conception dans le processus de développement. Processus de conception : principes, méthode et notation. Étude détaillée et application d'une méthode. Différentes étapes du processus. Conception et styles d'architectures logicielles. Patrons de conception (GRASP). Qualité de la conception : élaboration de solutions réutilisables, maintenables, extensibles, etc. Conception orientée objet. Caractéristiques d'une bonne conception détaillée (modularité, abstraction, cohésion, couplage, etc.). Outils d'aide à la conception. Documentation de la conception. Revue de la conception. Réalisation d'un projet.
INF1008 Analyse et conception d'algorithmes (ALG1001 ou PIF1005; INF1004) L'étudiant développera son habileté à produire des algorithmes corrects et efficaces. Il pourra analyser la complexité spatiale et temporelle d'un algorithme. Il entrera en contact avec différentes classes d'algorithmes et s'habituera à choisir le type d'algorithme qui convient le mieux à un problème donné. Définition d'un algorithme et de sa complexité. Notations asymptotiques. Résolution de récurrence. Étude d'efficacité et de complexité d'algorithmes de tri. Stratégies de conception d'algorithmes : algorithmes voraces, diviser-pour-régner, programmation dynamique, algorithmes probabilistes, exploration de graphes. Études de cas.
INF1009 Réseaux d'ordinateurs I (SIF1015) Le but du cours est de fournir les bases indispensables à la compréhension des architectures des réseaux informatiques qui permettent l'échange des données entre ordinateurs. Il précise le fonctionnement des réseaux : architecture en couches, protocoles. Étant donné que la connaissance du domaine est compliquée par la richesse du vocabulaire, on présente progressivement les notions et le vocabulaire à l'aide d'exemples simples. Une première partie présente les aspects liés à la transmission des informations : circuits de données, protocoles de liaison, réseaux à circuits virtuels. Une fois les principes présentés, on détaille le formalisme des sept couches OSI : concepts, description du modèle. Une troisième partie est consacrée aux réseaux locaux (Ethernet, Token Ring, Sans fil). Finalement, on explique les principes des réseaux IP.
INF1010 Réseaux d'ordinateurs II (INF1009) Ce cours permet aux étudiants de se familiariser avec les concepts et les contraintes des nouvelles technologies de l'information et des communications. Présentation des spécificités du réseau Internet : services, protocoles, applications, administration; introduction à la gestion sécurisée de l'information et aux techniques et mécanismes de sécurité informatique. Ce cours offre la possibilité aux étudiants de définir, de spécifier et de réaliser des applications clients serveurs sur le réseau Internet et de faire de l'administration de quelques services TCP/IP (DHCP, DNS,…) et des outils réseaux (Switch, routeur,..).
INF1014 Aspects juridiques de l'informatique (1 crédit) L'étudiant se familiarise avec les aspects juridiques de l'informatique. Il apprend à connaître les principales lois touchant la pratique de l'informatique. Il développe l'habileté à analyser des situations de travail de façon à éviter les problèmes juridiques. Notions juridiques : juridiction et territorialité, droit civil et droit pénal. Principales lois touchant la pratique de l'informatique : le droit d'auteur, le respect de la vie privée dans les secteurs public et privé, l'accès à l'information, le cadre juridique des technologies de l'information. Les aspects légaux des licences de produits informatiques. Les aspects légaux particuliers à l'Internet. Règlements pédagogiques particuliers : Pour s'inscrire aux cours TIN1003 Science, technologie et société et INF1014 Aspects juridiques de l'informatique, l'étudiant en informatique doit avoir complété 60 crédits dans le programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
INF1015 Stage d'informatique I L'objectif du cours Stage d'informatique I est de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1015 Stage d'informatique I, l'étudiant doit avoir réussi obligatoirement 45 crédits du programme.
INF1016 Stage d'informatique II Les objectifs du cours Stage d'informatique II sont de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail et de parfaire l'acquisition des méthodes de travail propres à l'informatique. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant en informatique doit avoir réussi obligatoirement 60 crédits du programme et le cours INF1015 Stage d'informatique I. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours GMA1001 Stages. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en physique et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours INF1015 Stage d'informatique I.
INF1034 Introduction aux interfaces utilisateur (INF1002) Amener l'étudiant à comprendre le comportement humain dans son interaction avec un environnement logiciel interactif, à développer une interface utilisateur simple et à évaluer l'ergonomie d'un logiciel interactif. Concepts de base de l'ergonomie du logiciel et des interactions personne-machine : modèles, principes et lignes directrices; introduction à la conception d'interfaces utilisateur : processus, outils, méthodologie et normes; outils de développement d'interfaces graphiques : utilisation des contrôles et des objets prédéfinis, propriétés, méthodes et gestion des événements; évaluation des interfaces : test, enquête et expérimentation. Ce cours comporte des exercices en Java.
INF1035 Concepts avancés en objet (INF1004) Amener l'étudiant à comprendre les mécanismes du développement orienté-objet. Maîtriser les concepts relatifs au paradigme objet. Utiliser un environnement de développement (IDE). Utiliser le paradigme de programmation événementielle. Utiliser les principes (et mécanismes) de la programmation par contrat. Intégrer la programmation aspect. Etude des notions importantes de la programmation orientée-objet : héritage simple et multiple, hiérarchie des classes, polymorphisme, notion de liaison statique et de liaison dynamique, etc. Notion d'interface et de classe abstraite. Notion d'extension de classes. Généricité. Pattern de conception (GoF). Refactoring. Notions de robustesse et de sécurité dans les applications. Programmation événementielle : événements, messages, gestion des exceptions. Programmation par contrats. Programmation aspect : notions d'aspect, de poincut, de point de jointure et d'advice. Les langages utilisés dans ce cours sont C#, Java et AspectJ (à titre comparatif). Les environnements de développement sont les plateformes Eclipse et Visuel C#. Le cours comporte 18 heures d'atelier.
PIF1005 Mathématiques pour informaticiens I Ce cours vise à introduire les concepts mathématiques fondamentaux en informatique. Rappels mathématiques : calcul avec les nombres réels, inégalités, logarithmes; théorie des ensembles : relations, fonctions, relations d'ordre; logique : techniques de preuve; algèbre booléenne ; graphes; induction mathématique.
PIF1006 Mathématiques pour informaticiens II (PIF1005) Ce cours vise à compléter la formation de base en mathématiques en vue d'applications en informatique. Algèbre matricielle : opérations, déterminant et matrice inverse; concepts d'analyse numérique : représentation des nombres et erreur, interpolation et approximation; langages formels : langage et grammaire, machine à états finis avec et sans sorties , équivalence d'automates, automate fini non déterministe, expression régulière, machine de Turing; cryptographie : schéma de cryptage, authentification, identification, cryptographie à clé secrète, cryptographie à clé publique; codage et compression de données : techniques de compression, compression sans perte (code de Hoffman), compression avec perte (compression JPEG). Ce cours comporte des travaux avec le logiciel Matlab.
SIF1015 Systèmes d'exploitation L'étudiant se familiarise avec les concepts fondamentaux des systèmes d'exploitation : structure générale d'un système d'exploitation, gestion des différents sous-systèmes : processus/thread, communication inter-processus/thread, systèmes de fichiers, accès réseau, gestion de la mémoire. Gestion des processus et des threads; gestion des entrées/sorties tels que les dispositifs Windows; communication inter-processus : tubes anonymes et nommés, files de messages, sockets, signaux; introduction aux principes de fonctionnement d'un système de fichiers; introduction aux concepts de la gestion de la mémoire; introduction à la communication réseau par sockets. Les étudiants expérimentent les concepts théoriques par des projets de développement d'utilitaires dans un environnement de développement ouvert sous une plateforme telle que UNIX/LINUX/ANDROID. Règlement pédagogique particulier : Pour les étudiants du baccalauréat en génie électrique (concentration génie informatique) (7144) le préalable est GEI1072 Résolution de problèmes d'ingénierie en C. Pour les étudiants du baccalauréat en informatique (7833) les préalables sont INF1004 Structures de données et algorithmes et SIF1053 Architecture des ordinateurs.
SIF1053 Architecture des ordinateurs L'étudiant prendra connaissance des éléments fondamentaux des architectures et des composantes des ordinateurs modernes tant statiques que mobiles (ex : architectures ARM, X86, x86-64), des organes périphériques. Etude des composantes des ordinateurs modernes: mémoire, circuits et représentation de l'information. Unité de commande, représentation des instructions machine, notions d'adressage, notions de microprogrammation et machine virtuelle. Unité arithmétique et logiques. Introduction des notions de communication série et parallèle.
SMI1001 Bases de données I Le cours vise à donner une solide introduction tant théorique que pratique aux concepts informatiques fondamentaux ayant trait aux bases de données, particulièrement aux bases de données relationnelles. Outre la modélisation des données qui constitue une partie importante de ce cours, l'apprentissage du langage SQL et d'un SGBD (Système de Gestion de Bases de Données) moderne seront également des objectifs importants de ce cours. Introduction aux bases de données : modèles et langages, les différents utilisateurs et leurs besoins, structure et architecture des SGBD. Le modèle Entité-Relation, modélisation UML. Le modèle relationnel : aperçu de l'algèbre et du calcul relationnel, notion de vue. Le langage SQL, aperçu d'autres langages relationnels. Les contraintes d'intégrité, les données manquantes et les valeurs nulles. La conception des bases de données relationnelles, dépendances fonctionnelles, dépendances multivaluées, dépendances de jointure, normalisation, formes normales 1FN, 2FN, 3FN, FNBC, 4FN et 5FN. Autres types de bases de données : relationnelles-objets et multidimensionnelles. Introduction aux données multimédias et XML. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'utilitaire TOAD. Le cours comporte 18 heures d'atelier.
SMI1002 Bases de données II (SMI1001) Le cours porte principalement sur des considérations techniques sous-jacentes à l'utilisation ou à la conception des SGBD, toujours dans le contexte du SGBD Oracle qui sert d'illustration et de contexte de mise en pratique des concepts. L'étudiant aura donc l'opportunité d'approfondir sa compréhension du fonctionnement interne d'un SGBD, notamment de Oracle, et d'autres aspects complémentaires associés à l'exploitation des données. Stockage et structures de fichiers, indexation et fonctions de hachage. Traitement et optimisation des requêtes. Traitement des transactions. Contrôle de la concurrence. Systèmes de recouvrement. Sécurité, contrôle des accès et encryptage. Bases de données et applications Web, modèles client-serveur et multitiers. Architectures des SGBD, bases de données parallèles et distribuées. Analyses des données, OLAP (on-line analytical processing), entreposage (warehousing) et forage (mining) de données. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'interface JSP (Java Sever Page).
STT1001 Probabilités et statistiques Statistiques de base en vue des applications. Séries statistiques : histogramme et polygone. Mesures de tendance centrale. Mesures de dispersion. Moments. Eléments de probabilités : variables aléatoires, distributions binomiales, hypergéométriques, normales. Poisson. Introduction à l'échantillonnage. Tests d'hypothèses simples.
TIN1003 Science, technologie et société (2 crédits) Identifier les effets inducteurs et destructeurs des innovations scientifiques et technologiques sur la société contemporaine; provoquer une réflexion critique sur la viabilité sociale des technologies nouvelles; préparer les étudiants à accepter la responsabilité sociale qui incombe à la future « intelligence technique supérieure ». Introduire aux thèmes principaux de la philosophie de la technique en étudiant les visages multiples de la technologie moderne et en examinant ses rapports avec les différentes dimensions impliquées dans le concept « qualité de vie ». Présenter une méthodologie pour l'analyse de risque : formes de risque (physiques, personnels, sociaux), méthodes d'évaluation de choix technologiques et de détermination de la viabilité sociale de ces technologies. Proposer et discuter des modèles de prises de décision dans l'allocation de ressources technologiques et l'implantation de technologies nouvelles (avec applications particulières à l'informatique, la robotique, etc.). Identifier les principes fondamentaux devant être respectés dans l'implantation de ces technologies. Circonscrire la fonction nouvelle et la responsabilité sociales de l'ingénieur. Règlement pédagogique particulier : Pour s'inscrire à ce cours, l'étudiant en informatique doit avoir réussi 60 crédits du programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
Cours optionnels (21 crédits)
L’étudiant doit suivre les cours suivants (15 crédits) : INF1011 Génie logiciel (INF1007) Familiariser l'étudiant avec les concepts et principes fondamentaux du génie logiciel et le sensibiliser à leur importance dans la production de logiciels de qualité. Amener l'étudiant à une compréhension des principes de base de l'assurance qualité. Principes et concepts fondamentaux du Génie Logiciel. Produit logiciel: caractéristiques. Processus de génie logiciel. Modèles de cycle de vie. Prototypage. Normes. Maturité des processus. Processus léger. Méthodes Agiles. Réutilisation de logiciel. Concepts favorisant la réutilisation - Pattern, COO, paradigme aspect. Entités réutilisable - lignes de produits logiciels, composants, produits COTS. Assurance qualité logiciel : Principes et Techniques. Processus de validation et de vérification : définition, rôles, techniques, impact sur la qualité, etc. Processus de test : techniques et stratégies. Planification, conception et réalisation des tests. Techniques de revues, Preuves, etc. Concepts et principes de la qualité. Contrôle de la qualité : qualité et métriques. Gestion de projets. Maintenance. Réingénierie. Documentation technique.INF1012 Élaboration et gestion de projets scientifiques (INF1011) Identifier et analyser les conséquences de l'innovation technologique et de la recherche et développement en sciences. Acquérir des connaissances et des techniques de travail en situation de projets informatiques. Développer l'aptitude à planifier de tels projets, à y participer et, éventuellement, à les gérer. Développer l'habileté à gérer son temps et celui de ses collaborateurs. Se familiariser à la dimension internationale de la gestion des projets. Les différentes formes d'innovation technologique. Évaluation des impacts positifs et négatifs de l'innovation technologique et de la recherche et développement en sciences : étude coût/bénéfice, impact sur les individus, la communauté scientifique et la société. Gestion de projets informatiques : identification des objectifs et définition du projet, élaboration de solutions à caractère scientifique, planification des activités, échéanciers; choix de l'équipe, attribution des responsabilités; importance de la coordination en environnement de projet; suivi des activités et gestion du temps; progiciels de gestion de projets.
INF1013 Environnement de développement et composantes logicielles (INF1005 ou INF1035; SIF1015) Compléter la formation des étudiants en lien avec les méthodologies et technologies de développement des applications Frame/Web d'envergure. Apprendre à construire des composants réutilisables en s'appuyant sur des bibliothèques existantes. Réaliser les applications Web et Frame selon les modèles MVC/MVP ainsi que des Application Serveur sous forme d'APE RESTFUL. Utiliser et configurer des environnements de développement pour de grands projets logiciels. Maîtriser les gestionnaires de dépendances de projets. Open Source/Propriétaires. Quelques-unes des technologies importantes seront utilisées : C# - ASP.Net, Java-JSP, Python-DJANGO, Ruby-Rails, GWT, ANGULAR, REACT, Maven, Gradle, etc.
INF1018 Analyse de programmes (INF1035) Présenter à l'étudiant les principes et les techniques de base de l'implantation des langages de programmation. L'initier à l'évaluation des langages de programmation et à l'analyse de programmes. Familiariser l'étudiant avec certains outils de description et d'analyse des langages de programmation. Étude des langages de programmation dans l'optique de construction d'outils d'environnement de programmation. Concepts fondamentaux des langages de programmation modernes. Classification et évaluation des langages de programmation. Concepts et critères de qualité. Syntaxe et sémantique des langages de programmation. Méthodes de description formelles. Grammaire et Langages. Méthodes d'analyse lexicale et syntaxique : principes, approches et applications. Outils pour le traitement des langages. Analyse sémantique. Introduction à la génération et à l'optimisation de code. Éléments d'analyse de programmes en langages évolués : statique, dynamique, dépendances, etc.
INF1043 Sujets spéciaux DUAL Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en développement de logiciel, en développement d’applications mobiles, en science des données ou en cybersécurité et infonuagique et qui ne sont pas nécessairement vues ou approfondies dans le programme. Ce cours s'adresse aux étudiants de l’option DUAL du programme de baccalauréat en informatique. Il s'agit de faire de la formation de contenu au sein de l'entreprise qui accueille l'étudiant dans le cadre de l'entente DUAL. Elle est aussi encadrée par un professeur du programme.
L'étudiant doit suivre un ou deux cours (3 ou 6 crédits) parmi les cours d'informatique suivants : IAR1001 Intelligence artificielle (STT1001 ou STT1003; INF1008; INF1004) L'objectif principal de ce cours est d'apprendre les concepts de base de l'intelligence artificielle (IA) et, en particulier, ses aspects informatiques et mathématiques. L'étudiant devra être en mesure d'identifier les problèmes qui relèvent de l'IA, de sélectionner les techniques ou approches pertinentes et de les mettre en application de façon efficiente. Les techniques de représentation des connaissances (structures de données) et de recherche (algorithmes), ainsi que leur réalisation informatique, de même que certains domaines d'application, constituent la matière fondamentale de ce cours. Plus spécifiquement, la matière sera présentée principalement dans la perspective des agents intelligents, et, de façon complémentaire, dans le contexte des systèmes multiagents et de l'intelligence artificielle distribuée. Le cours fait le tour des aspects d'actualité de l'intelligence artificielle. Les agents "intelligents" servent de vecteur pour promouvoir l'explication des autres concepts de l'IA. Parmi ces concepts, nous voyons : les méthodes et stratégies de recherches de solution, les méthodes de jeux, la connaissance et le raisonnement fondés sur la logique du premier ordre et les inférences en logique du premier ordre, la planification et l'action logique et, enfin, le raisonnement probabiliste avec des connaissances incertaines. Dans une deuxième partie, nous introduisons la notion d'apprentissage automatique au moyen des réseaux de neurones et le traitement des langues naturelles.
PRO1027 Programmation scientifique en C (INF1002 ou PRO1026) Approfondir les concepts fondamentaux de la conception et de la production de logiciel. Développer l'habileté à réaliser des logiciels de qualité. Réaliser des applications pratiques dans le domaine des méthodes numériques. Étude des langages C et C++. Qualité des programmes : clarté, lisibilité, modifiabilité, efficacité, facilité d'usage, robustesse. Programmation modulaire. Programmation en langage C ou C++. A titre indicatif, les applications sont choisies parmi les suivantes : statistiques, manipulation de matrices, résolution de systèmes d'équations linéaires, interpolation, approximation, dérivation et intégration numériques.
SIF1033 Traitement d'image (INF1004; STT1001 ou STT1042) Amener l'étudiant à pouvoir utiliser l'ordinateur pour traiter une image de façon à en améliorer la perception visuelle et à permettre la détection d'objets significatifs. Présentation des notions de base du traitement de l'image : correction géométrique et radiométrique des images, amélioration du contraste, amélioration des images par filtrage spatial isotropique et anisotropique, spectral et morphologique; segmentation des images par seuillage; détection des arêtes et des contours, détection des droites et des formes circulaires, détection des objets par corrélation spatiale; génération d'images tomographiques; applications Client/Serveur permettant le traitement d'image à distance; protocoles de transfert d'images. Les étudiants expérimentent les concepts du traitement des images par des projets pratiques codés en langage C ou en langage C++.
L'étudiant peut suivre un cours (0 ou 3 crédits) parmi les cours d'informatique des cheminements (02), (03) et (04) : CSE1001 Introduction à la cybersécurité (INF1001; INF1004) Ce cours permettra à l’étudiant de prendre conscience des problématiques et des enjeux critiques en cybersécurité. L’étudiant pourra se familiariser avec les concepts de base et acquérir les connaissances essentielles dans divers domaines d’expertise de la cybersécurité. Il aura l’occasion d’explorer les différentes techniques permettant de sécuriser les données. Ce cours aborde principalement les volets suivants: Enjeux, Modèles de sécurité, Triade CIA, Identification des actifs informationnels et analyse de risque, Cybermenaces et mécanismes de cyberdéfense, Étude des vulnérabilités, exploitation et contre-mesures, Hachage, Cryptosystèmes, Protocoles cryptographiques, Spécification des politiques de sécurité, Modèles de contrôle d’accès, Authentification.
INF1020 Commerce électronique Ce cours a comme objectif principal l'initiation aux concepts de base des affaires et du commerce électronique et leur mise en pratique dans la réalisation d'un projet de commerce électronique. Le cours a aussi comme objectifs secondaires : d'apprendre à gérer un projet d'équipe en informatique. Aperçu du commerce électronique; la "digitalisation" des affaires; les processus et stratégies B2B (business-to-business); le rôle des intermédiaires indépendants (third parties); l'environnement régulateur; EDI, e-commerce et Internet; risques des systèmes non-sécuritaires; risques de gestion; normes, protocoles et langages Internet; cryptographie et authentification; murs coupe-feu (firewalls); mécanismes de paiement en ligne pour le e-commerce; agents intelligents; le marketing sur le Web; autres sujets d'actualité en affaires et en commerce électronique. Règlement pédagogique particulier : Pour s'inscrire au cours INF1020 Commerce électronique, les étudiants inscrits au cheminement DEC-BAC (7533) doivent avoir réussi les cours obligatoires de la première session. Les étudiants inscrits au double baccalauréat : mathématiques et informatique (6833) ou inscrits au double baccalauréat en physique et en informatique (6925) doivent avoir réussi les cours obligatoires des cinq (5) premières sessions.
INF1030 Introduction au développement d'applications mobiles (version Android) (INF1005 ou INF1035) Dans ce cours, l'étudiant sera amené à comprendre le cycle de développement d'applications mobiles. Utilisant le langage Java, les étudiants pourront créer des programmes tant standalone que déployés sur des plateformes mobiles. L'emphase sera mise sur les apprentissages des meilleurs pratiques de développement d'application mobiles et ce dans le but de faciliter et d'augmenter l'efficacité de ce développement. Les étudiants pourront aussi comprendre le fonctionnement de la machine virtuelle Dalvik comme plateforme pour le développement d'applications Android.
INF1031 Développement d'applications mobiles avancées (version Android) (INF1030) A partir de notions acquises dans le cours Introduction au développement d'applications mobiles (INF1030), ce cours permet aux étudiants de développer leurs compétences en développement d'applications mobiles avancées et ce dans des domaines divers comme les sciences, le commerce, la santé, le divertissement, etc. De plus, les étudiants seront amenés à mieux comprendre le développement d'applications verticales impliquant des notions d'architecture multi-tiers, de connectivité réseau. De sécurité, etc.
SDD1001 Introduction à la science des données Ce cours aborde les langages modernes utilisés en sciences des données comme Python, les bibliothèques de statistiques, de calcul symbolique ainsi que leurs applications. Les langages seront abordés dans les paradigmes orientés objets et fonctionnels.
SDD1002 Modélisation et simulation (STT1001; PIF1005) Ce cours aborde les différentes techniques théoriques et pratiques de simulation, de modélisation, et de visualisation, des données. L'étudiant sera amené à explorer plusieurs outils utilisés dans les sciences des données. Ce cours aborde aussi les notions liées à la généralisation: sous-ajustement, sur-ajustement, validation croisée. Approches: classification, régression, agrégation (clustering). Principaux éléments: Outils de simulation, de visualisation et manipulation de données comme Python ou R ou Orange, ou Tableau, autre.
Cours complémentaires (9 crédits)
L'étudiant doit suivre les trois cours complémentaires (9 crédits) suivants : INF1040 DUAL I en informatique, INF1041 DUAL II en informatique et INF1042 DUAL III en informatique.Développement d’applications web et mobiles (DUAL)
(Cheminement: 6) À moins d'indication contraire, un cours comporte trois (3) crédits.Cours obligatoires (60 crédits)
INF1001 Programmation Web Permettre à l'étudiant de s'initier aux concepts du Web. A travers des exemples détaillés, l'étudiant apprend à créer et à publier des sites Web en exploitant les nouvelles technologies du Web. Il se familiarise avec les langages de programmation propres au Web. Principaux éléments du Web; langage de balisage, conception de page Web, validation, organisation et gestion d'un site Web, programmation coté client et coté serveur, introduction à XML. Technologies : HTML, CSS, DOM, JavaScript, php. Ce cours utilise les langages HTML, JavaScript, VbScript, XML et l'outil de conception de pages Web EditPlus.INF1002 Introduction à la programmation objet Permettre à l'étudiant de se familiariser avec l'informatique comme discipline et surtout à la programmation impérative et orientée objet. Présentation des structures de commandes, des types, des objets, des structures de données élémentaires (tableau, chaîne de caractères); mécanismes de structuration d'applications : sous-programmes, notions de classe, d'objet, d'application; développement d'applications : choix des données et des algorithmes, codification, compilation, exécution, mise au point de classes et d'applications. Introduction à l'informatique; outils de construction d'application : syntaxe et sémantique d'un langage de haut niveau; variables, types, expressions, affectation; entrée-sortie élémentaire; structures de sélection et d'itération : sous-programmes et passage de paramètres : introduction au paradigme objet : notions de classe, d'objet, d'état et de méthode, d'héritage; algorithmes et résolution de problèmes (problem-solving) : stratégies de solution de problèmes, rôles de l'algorithme dans la résolution de problèmes; stratégies d'implantation; structure de données de base : tableaux, chaînes de caractères; stratégie de vérification : conception de points-tests. Ce cours utilise le langage de programmation Java sur la plate-forme Eclipse. Il comporte 18 heures d'atelier.
INF1004 Structures de données et algorithmes (INF1002) Permettre à l'étudiant de se familiariser avec les structures de données classiques et les algorithmes qui leur sont associés; réaliser des implantations statiques et dynamiques de ces structures : faire l'évaluation de la complexité spatiale et temporelle dans les cas simples; étudier la récursion et la comparer avec l'itération. Revue des concepts élémentaires de programmation; bases de la programmation Objet: encapsulation, dissimulation de l'information; séparation du comportement et de l'implantation; héritage et polymorphisme; conception par héritage et par composition; utilisation de fichiers; les principales structures de données: liste, pile, file, table d'adressage dispersé, arbre, graphe; implantation statique et dynamique; les algorithmes de fouille, de tri, les fonctions de hachage et les stratégies de traitement des collisions, parcours d'arbres et de graphes; le concept de récursion : les fonctions mathématiques récursives; comparaison avec les fonctions itératives correspondantes; implantation de récursion à l'aide de piles; analyse élémentaire de la complexité des algorithmes: complexité spatiale et complexité temporelle; notation "grand O", comportement du meilleur cas, du cas moyen et du pire cas; principales classes de complexité d'algorithmes; stratégies de test pour les classes et les applications. Ce cours utilise le langage de programmation Java et la plateforme Eclipse.
INF1006 Analyse et modélisation (INF1004) Familiariser l'étudiant avec le processus de développement de systèmes informatiques, et plus particulièrement avec les phases initiales. L'initier à l'exercice de l'analyse des besoins, à la spécification et à la modélisation des systèmes ainsi qu'à l'évaluation de ces étapes. Explorer les fondements et l'évolution des méthodes d'analyse. Processus de développement et activités initiales: analyse des besoins et spécifications; importance de l'analyse dans le processus de développement; étude détaillée et application d'une méthode (UML); différentes étapes du processus: analyse des besoins, formalisation et validation; analyse et modélisation orientées objet; outils GLAO (CASE) de modélisation; dossier des spécifications et des exigences d'un logiciel; normes, critères de qualité de la spécification; revue technique; réalisation d'un dossier de spécifications. Le cours comporte 12 heures d'atelier.
INF1007 Conception de logiciels (INF1006) Initier l'étudiant au processus de conception et le sensibiliser à ses difficultés et à son importance. Procéder à l'étude détaillée et à l'application d'une méthode. Permettre à l'étudiant d'élaborer des solutions de qualité. Problématique du processus de conception. Importance de la conception dans le processus de développement. Processus de conception : principes, méthode et notation. Étude détaillée et application d'une méthode. Différentes étapes du processus. Conception et styles d'architectures logicielles. Patrons de conception (GRASP). Qualité de la conception : élaboration de solutions réutilisables, maintenables, extensibles, etc. Conception orientée objet. Caractéristiques d'une bonne conception détaillée (modularité, abstraction, cohésion, couplage, etc.). Outils d'aide à la conception. Documentation de la conception. Revue de la conception. Réalisation d'un projet.
INF1008 Analyse et conception d'algorithmes (ALG1001 ou PIF1005; INF1004) L'étudiant développera son habileté à produire des algorithmes corrects et efficaces. Il pourra analyser la complexité spatiale et temporelle d'un algorithme. Il entrera en contact avec différentes classes d'algorithmes et s'habituera à choisir le type d'algorithme qui convient le mieux à un problème donné. Définition d'un algorithme et de sa complexité. Notations asymptotiques. Résolution de récurrence. Étude d'efficacité et de complexité d'algorithmes de tri. Stratégies de conception d'algorithmes : algorithmes voraces, diviser-pour-régner, programmation dynamique, algorithmes probabilistes, exploration de graphes. Études de cas.
INF1009 Réseaux d'ordinateurs I (SIF1015) Le but du cours est de fournir les bases indispensables à la compréhension des architectures des réseaux informatiques qui permettent l'échange des données entre ordinateurs. Il précise le fonctionnement des réseaux : architecture en couches, protocoles. Étant donné que la connaissance du domaine est compliquée par la richesse du vocabulaire, on présente progressivement les notions et le vocabulaire à l'aide d'exemples simples. Une première partie présente les aspects liés à la transmission des informations : circuits de données, protocoles de liaison, réseaux à circuits virtuels. Une fois les principes présentés, on détaille le formalisme des sept couches OSI : concepts, description du modèle. Une troisième partie est consacrée aux réseaux locaux (Ethernet, Token Ring, Sans fil). Finalement, on explique les principes des réseaux IP.
INF1010 Réseaux d'ordinateurs II (INF1009) Ce cours permet aux étudiants de se familiariser avec les concepts et les contraintes des nouvelles technologies de l'information et des communications. Présentation des spécificités du réseau Internet : services, protocoles, applications, administration; introduction à la gestion sécurisée de l'information et aux techniques et mécanismes de sécurité informatique. Ce cours offre la possibilité aux étudiants de définir, de spécifier et de réaliser des applications clients serveurs sur le réseau Internet et de faire de l'administration de quelques services TCP/IP (DHCP, DNS,…) et des outils réseaux (Switch, routeur,..).
INF1014 Aspects juridiques de l'informatique (1 crédit) L'étudiant se familiarise avec les aspects juridiques de l'informatique. Il apprend à connaître les principales lois touchant la pratique de l'informatique. Il développe l'habileté à analyser des situations de travail de façon à éviter les problèmes juridiques. Notions juridiques : juridiction et territorialité, droit civil et droit pénal. Principales lois touchant la pratique de l'informatique : le droit d'auteur, le respect de la vie privée dans les secteurs public et privé, l'accès à l'information, le cadre juridique des technologies de l'information. Les aspects légaux des licences de produits informatiques. Les aspects légaux particuliers à l'Internet. Règlements pédagogiques particuliers : Pour s'inscrire aux cours TIN1003 Science, technologie et société et INF1014 Aspects juridiques de l'informatique, l'étudiant en informatique doit avoir complété 60 crédits dans le programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
INF1015 Stage d'informatique I L'objectif du cours Stage d'informatique I est de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1015 Stage d'informatique I, l'étudiant doit avoir réussi obligatoirement 45 crédits du programme.
INF1016 Stage d'informatique II Les objectifs du cours Stage d'informatique II sont de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail et de parfaire l'acquisition des méthodes de travail propres à l'informatique. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant en informatique doit avoir réussi obligatoirement 60 crédits du programme et le cours INF1015 Stage d'informatique I. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours GMA1001 Stages. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en physique et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours INF1015 Stage d'informatique I.
INF1034 Introduction aux interfaces utilisateur (INF1002) Amener l'étudiant à comprendre le comportement humain dans son interaction avec un environnement logiciel interactif, à développer une interface utilisateur simple et à évaluer l'ergonomie d'un logiciel interactif. Concepts de base de l'ergonomie du logiciel et des interactions personne-machine : modèles, principes et lignes directrices; introduction à la conception d'interfaces utilisateur : processus, outils, méthodologie et normes; outils de développement d'interfaces graphiques : utilisation des contrôles et des objets prédéfinis, propriétés, méthodes et gestion des événements; évaluation des interfaces : test, enquête et expérimentation. Ce cours comporte des exercices en Java.
INF1035 Concepts avancés en objet (INF1004) Amener l'étudiant à comprendre les mécanismes du développement orienté-objet. Maîtriser les concepts relatifs au paradigme objet. Utiliser un environnement de développement (IDE). Utiliser le paradigme de programmation événementielle. Utiliser les principes (et mécanismes) de la programmation par contrat. Intégrer la programmation aspect. Etude des notions importantes de la programmation orientée-objet : héritage simple et multiple, hiérarchie des classes, polymorphisme, notion de liaison statique et de liaison dynamique, etc. Notion d'interface et de classe abstraite. Notion d'extension de classes. Généricité. Pattern de conception (GoF). Refactoring. Notions de robustesse et de sécurité dans les applications. Programmation événementielle : événements, messages, gestion des exceptions. Programmation par contrats. Programmation aspect : notions d'aspect, de poincut, de point de jointure et d'advice. Les langages utilisés dans ce cours sont C#, Java et AspectJ (à titre comparatif). Les environnements de développement sont les plateformes Eclipse et Visuel C#. Le cours comporte 18 heures d'atelier.
PIF1005 Mathématiques pour informaticiens I Ce cours vise à introduire les concepts mathématiques fondamentaux en informatique. Rappels mathématiques : calcul avec les nombres réels, inégalités, logarithmes; théorie des ensembles : relations, fonctions, relations d'ordre; logique : techniques de preuve; algèbre booléenne ; graphes; induction mathématique.
PIF1006 Mathématiques pour informaticiens II (PIF1005) Ce cours vise à compléter la formation de base en mathématiques en vue d'applications en informatique. Algèbre matricielle : opérations, déterminant et matrice inverse; concepts d'analyse numérique : représentation des nombres et erreur, interpolation et approximation; langages formels : langage et grammaire, machine à états finis avec et sans sorties , équivalence d'automates, automate fini non déterministe, expression régulière, machine de Turing; cryptographie : schéma de cryptage, authentification, identification, cryptographie à clé secrète, cryptographie à clé publique; codage et compression de données : techniques de compression, compression sans perte (code de Hoffman), compression avec perte (compression JPEG). Ce cours comporte des travaux avec le logiciel Matlab.
SIF1015 Systèmes d'exploitation L'étudiant se familiarise avec les concepts fondamentaux des systèmes d'exploitation : structure générale d'un système d'exploitation, gestion des différents sous-systèmes : processus/thread, communication inter-processus/thread, systèmes de fichiers, accès réseau, gestion de la mémoire. Gestion des processus et des threads; gestion des entrées/sorties tels que les dispositifs Windows; communication inter-processus : tubes anonymes et nommés, files de messages, sockets, signaux; introduction aux principes de fonctionnement d'un système de fichiers; introduction aux concepts de la gestion de la mémoire; introduction à la communication réseau par sockets. Les étudiants expérimentent les concepts théoriques par des projets de développement d'utilitaires dans un environnement de développement ouvert sous une plateforme telle que UNIX/LINUX/ANDROID. Règlement pédagogique particulier : Pour les étudiants du baccalauréat en génie électrique (concentration génie informatique) (7144) le préalable est GEI1072 Résolution de problèmes d'ingénierie en C. Pour les étudiants du baccalauréat en informatique (7833) les préalables sont INF1004 Structures de données et algorithmes et SIF1053 Architecture des ordinateurs.
SIF1053 Architecture des ordinateurs L'étudiant prendra connaissance des éléments fondamentaux des architectures et des composantes des ordinateurs modernes tant statiques que mobiles (ex : architectures ARM, X86, x86-64), des organes périphériques. Etude des composantes des ordinateurs modernes: mémoire, circuits et représentation de l'information. Unité de commande, représentation des instructions machine, notions d'adressage, notions de microprogrammation et machine virtuelle. Unité arithmétique et logiques. Introduction des notions de communication série et parallèle.
SMI1001 Bases de données I Le cours vise à donner une solide introduction tant théorique que pratique aux concepts informatiques fondamentaux ayant trait aux bases de données, particulièrement aux bases de données relationnelles. Outre la modélisation des données qui constitue une partie importante de ce cours, l'apprentissage du langage SQL et d'un SGBD (Système de Gestion de Bases de Données) moderne seront également des objectifs importants de ce cours. Introduction aux bases de données : modèles et langages, les différents utilisateurs et leurs besoins, structure et architecture des SGBD. Le modèle Entité-Relation, modélisation UML. Le modèle relationnel : aperçu de l'algèbre et du calcul relationnel, notion de vue. Le langage SQL, aperçu d'autres langages relationnels. Les contraintes d'intégrité, les données manquantes et les valeurs nulles. La conception des bases de données relationnelles, dépendances fonctionnelles, dépendances multivaluées, dépendances de jointure, normalisation, formes normales 1FN, 2FN, 3FN, FNBC, 4FN et 5FN. Autres types de bases de données : relationnelles-objets et multidimensionnelles. Introduction aux données multimédias et XML. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'utilitaire TOAD. Le cours comporte 18 heures d'atelier.
SMI1002 Bases de données II (SMI1001) Le cours porte principalement sur des considérations techniques sous-jacentes à l'utilisation ou à la conception des SGBD, toujours dans le contexte du SGBD Oracle qui sert d'illustration et de contexte de mise en pratique des concepts. L'étudiant aura donc l'opportunité d'approfondir sa compréhension du fonctionnement interne d'un SGBD, notamment de Oracle, et d'autres aspects complémentaires associés à l'exploitation des données. Stockage et structures de fichiers, indexation et fonctions de hachage. Traitement et optimisation des requêtes. Traitement des transactions. Contrôle de la concurrence. Systèmes de recouvrement. Sécurité, contrôle des accès et encryptage. Bases de données et applications Web, modèles client-serveur et multitiers. Architectures des SGBD, bases de données parallèles et distribuées. Analyses des données, OLAP (on-line analytical processing), entreposage (warehousing) et forage (mining) de données. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'interface JSP (Java Sever Page).
STT1001 Probabilités et statistiques Statistiques de base en vue des applications. Séries statistiques : histogramme et polygone. Mesures de tendance centrale. Mesures de dispersion. Moments. Eléments de probabilités : variables aléatoires, distributions binomiales, hypergéométriques, normales. Poisson. Introduction à l'échantillonnage. Tests d'hypothèses simples.
TIN1003 Science, technologie et société (2 crédits) Identifier les effets inducteurs et destructeurs des innovations scientifiques et technologiques sur la société contemporaine; provoquer une réflexion critique sur la viabilité sociale des technologies nouvelles; préparer les étudiants à accepter la responsabilité sociale qui incombe à la future « intelligence technique supérieure ». Introduire aux thèmes principaux de la philosophie de la technique en étudiant les visages multiples de la technologie moderne et en examinant ses rapports avec les différentes dimensions impliquées dans le concept « qualité de vie ». Présenter une méthodologie pour l'analyse de risque : formes de risque (physiques, personnels, sociaux), méthodes d'évaluation de choix technologiques et de détermination de la viabilité sociale de ces technologies. Proposer et discuter des modèles de prises de décision dans l'allocation de ressources technologiques et l'implantation de technologies nouvelles (avec applications particulières à l'informatique, la robotique, etc.). Identifier les principes fondamentaux devant être respectés dans l'implantation de ces technologies. Circonscrire la fonction nouvelle et la responsabilité sociales de l'ingénieur. Règlement pédagogique particulier : Pour s'inscrire à ce cours, l'étudiant en informatique doit avoir réussi 60 crédits du programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
Cours optionnels (21 crédits)
L’étudiant doit suivre les cours suivant (15 crédits) : INF1011 Génie logiciel (INF1007) Familiariser l'étudiant avec les concepts et principes fondamentaux du génie logiciel et le sensibiliser à leur importance dans la production de logiciels de qualité. Amener l'étudiant à une compréhension des principes de base de l'assurance qualité. Principes et concepts fondamentaux du Génie Logiciel. Produit logiciel: caractéristiques. Processus de génie logiciel. Modèles de cycle de vie. Prototypage. Normes. Maturité des processus. Processus léger. Méthodes Agiles. Réutilisation de logiciel. Concepts favorisant la réutilisation - Pattern, COO, paradigme aspect. Entités réutilisable - lignes de produits logiciels, composants, produits COTS. Assurance qualité logiciel : Principes et Techniques. Processus de validation et de vérification : définition, rôles, techniques, impact sur la qualité, etc. Processus de test : techniques et stratégies. Planification, conception et réalisation des tests. Techniques de revues, Preuves, etc. Concepts et principes de la qualité. Contrôle de la qualité : qualité et métriques. Gestion de projets. Maintenance. Réingénierie. Documentation technique.INF1020 Commerce électronique Ce cours a comme objectif principal l'initiation aux concepts de base des affaires et du commerce électronique et leur mise en pratique dans la réalisation d'un projet de commerce électronique. Le cours a aussi comme objectifs secondaires : d'apprendre à gérer un projet d'équipe en informatique. Aperçu du commerce électronique; la "digitalisation" des affaires; les processus et stratégies B2B (business-to-business); le rôle des intermédiaires indépendants (third parties); l'environnement régulateur; EDI, e-commerce et Internet; risques des systèmes non-sécuritaires; risques de gestion; normes, protocoles et langages Internet; cryptographie et authentification; murs coupe-feu (firewalls); mécanismes de paiement en ligne pour le e-commerce; agents intelligents; le marketing sur le Web; autres sujets d'actualité en affaires et en commerce électronique. Règlement pédagogique particulier : Pour s'inscrire au cours INF1020 Commerce électronique, les étudiants inscrits au cheminement DEC-BAC (7533) doivent avoir réussi les cours obligatoires de la première session. Les étudiants inscrits au double baccalauréat : mathématiques et informatique (6833) ou inscrits au double baccalauréat en physique et en informatique (6925) doivent avoir réussi les cours obligatoires des cinq (5) premières sessions.
INF1030 Introduction au développement d'applications mobiles (version Android) (INF1005 ou INF1035) Dans ce cours, l'étudiant sera amené à comprendre le cycle de développement d'applications mobiles. Utilisant le langage Java, les étudiants pourront créer des programmes tant standalone que déployés sur des plateformes mobiles. L'emphase sera mise sur les apprentissages des meilleurs pratiques de développement d'application mobiles et ce dans le but de faciliter et d'augmenter l'efficacité de ce développement. Les étudiants pourront aussi comprendre le fonctionnement de la machine virtuelle Dalvik comme plateforme pour le développement d'applications Android.
INF1031 Développement d'applications mobiles avancées (version Android) (INF1030) A partir de notions acquises dans le cours Introduction au développement d'applications mobiles (INF1030), ce cours permet aux étudiants de développer leurs compétences en développement d'applications mobiles avancées et ce dans des domaines divers comme les sciences, le commerce, la santé, le divertissement, etc. De plus, les étudiants seront amenés à mieux comprendre le développement d'applications verticales impliquant des notions d'architecture multi-tiers, de connectivité réseau. De sécurité, etc.
INF1043 Sujets spéciaux DUAL Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en développement de logiciel, en développement d’applications mobiles, en science des données ou en cybersécurité et infonuagique et qui ne sont pas nécessairement vues ou approfondies dans le programme. Ce cours s'adresse aux étudiants de l’option DUAL du programme de baccalauréat en informatique. Il s'agit de faire de la formation de contenu au sein de l'entreprise qui accueille l'étudiant dans le cadre de l'entente DUAL. Elle est aussi encadrée par un professeur du programme.
L'étudiant doit suivre un ou deux cours (3 ou 6 crédits) parmi les cours d'informatique suivants : INF1021 Les architectures réparties (INF1009) Ce cours permet d'acquérir des connaissances sur les systèmes répartis. Il permet aux étudiants de s'initier aux méthodes de conception et de réalisation des applications informatiques réparties. À la fin du cours, les étudiants seront capables de comparer plusieurs méthodes de réalisation de systèmes répartis. Utilisation des SOCKETS : rappel sur le protocole TCP; interface Java de manipulation des sockets (Java.net); réalisation d'applications clients serveurs. Utilisation de Java RMI : introduction à RMI (Remote Method Invocation); implémentation des objets, côté client et côté serveur. Introduction à CORBA : évolution vers les applications distribuées; protocole RPC (Remote Procedure Calls); norme CORBA; implémentation du client et de l'objet distribué CORBA. Agents intelligents : concept d'agent; agents coopératifs, rationnels, adaptatifs, mobiles; agents informationnels intelligents; agents pour le Web; sécurité, mobilité, aspects algorithmiques. XML (eXtensible Markup Language) : SGML, HTML, XML et le Web; EDI et XML pour les applications d'affaires électroniques; définitions de nouveaux langages basés sur XML; technologies et applications XML; protocoles de communication basés sur le XML.
INF1032 Introduction au développement d'applications mobiles (plateforme IOS) (INF1005 ou INF1035) Dans ce cours, l'étudiant sera amené à comprendre le cycle de développement d'applications mobile. Utilisant le langage Objective C, les étudiants pourront créer des programmes tant standalone que déployés sur des plateformes mobiles. L'emphase sera mise sur les apprentissages des meilleurs pratiques de développement d'application mobiles et ce dans le but de faciliter et d'augmenter l'efficacité de ce développement. Les étudiants pourront aussi apprendre comment développer des applications sur des plateformes mobiles IOS (ex : IPhone et IPad).
SIF1032 Graphisme par ordinateur (MAP1006 ou PIF1006; INF1004) L'étudiant se familiarise avec les algorithmes fondamentaux du graphisme : représentation des objets 2D et 3D. Il est amené à comprendre les concepts de transformation linéaire en coordonnées homogènes, la composition des transformations et le calcul matriciel, la transformation en perspective, les modèles de réflexion de la lumière, la couleur, l'illumination et le rendu, l'ajout de texture. Création de modèles d'objets simples, formes polygonales; création de modèles plus complexes à l'aide de moteurs de formes; application de transformations 3D pour la visualisation et les déplacements d'objets 3D; introduction aux notions de réalisme d'une scène : illumination, couleur, propriétés des objets : texture, transparence. Le cours comporte des projets pratiques d'animation réalisés en langage C, en langage C++ à l'aide des libraires graphiques OpenGl et DirectX
L'étudiant peut suivre un cours (0 ou 3 crédits) parmi les cours d'informatique des cheminements (01), (03) et (04) : CSE1001 Introduction à la cybersécurité (INF1001; INF1004) Ce cours permettra à l’étudiant de prendre conscience des problématiques et des enjeux critiques en cybersécurité. L’étudiant pourra se familiariser avec les concepts de base et acquérir les connaissances essentielles dans divers domaines d’expertise de la cybersécurité. Il aura l’occasion d’explorer les différentes techniques permettant de sécuriser les données. Ce cours aborde principalement les volets suivants: Enjeux, Modèles de sécurité, Triade CIA, Identification des actifs informationnels et analyse de risque, Cybermenaces et mécanismes de cyberdéfense, Étude des vulnérabilités, exploitation et contre-mesures, Hachage, Cryptosystèmes, Protocoles cryptographiques, Spécification des politiques de sécurité, Modèles de contrôle d’accès, Authentification.
INF1012 Élaboration et gestion de projets scientifiques (INF1011) Identifier et analyser les conséquences de l'innovation technologique et de la recherche et développement en sciences. Acquérir des connaissances et des techniques de travail en situation de projets informatiques. Développer l'aptitude à planifier de tels projets, à y participer et, éventuellement, à les gérer. Développer l'habileté à gérer son temps et celui de ses collaborateurs. Se familiariser à la dimension internationale de la gestion des projets. Les différentes formes d'innovation technologique. Évaluation des impacts positifs et négatifs de l'innovation technologique et de la recherche et développement en sciences : étude coût/bénéfice, impact sur les individus, la communauté scientifique et la société. Gestion de projets informatiques : identification des objectifs et définition du projet, élaboration de solutions à caractère scientifique, planification des activités, échéanciers; choix de l'équipe, attribution des responsabilités; importance de la coordination en environnement de projet; suivi des activités et gestion du temps; progiciels de gestion de projets.
INF1013 Environnement de développement et composantes logicielles (INF1005 ou INF1035; SIF1015) Compléter la formation des étudiants en lien avec les méthodologies et technologies de développement des applications Frame/Web d'envergure. Apprendre à construire des composants réutilisables en s'appuyant sur des bibliothèques existantes. Réaliser les applications Web et Frame selon les modèles MVC/MVP ainsi que des Application Serveur sous forme d'APE RESTFUL. Utiliser et configurer des environnements de développement pour de grands projets logiciels. Maîtriser les gestionnaires de dépendances de projets. Open Source/Propriétaires. Quelques-unes des technologies importantes seront utilisées : C# - ASP.Net, Java-JSP, Python-DJANGO, Ruby-Rails, GWT, ANGULAR, REACT, Maven, Gradle, etc.
INF1018 Analyse de programmes (INF1035) Présenter à l'étudiant les principes et les techniques de base de l'implantation des langages de programmation. L'initier à l'évaluation des langages de programmation et à l'analyse de programmes. Familiariser l'étudiant avec certains outils de description et d'analyse des langages de programmation. Étude des langages de programmation dans l'optique de construction d'outils d'environnement de programmation. Concepts fondamentaux des langages de programmation modernes. Classification et évaluation des langages de programmation. Concepts et critères de qualité. Syntaxe et sémantique des langages de programmation. Méthodes de description formelles. Grammaire et Langages. Méthodes d'analyse lexicale et syntaxique : principes, approches et applications. Outils pour le traitement des langages. Analyse sémantique. Introduction à la génération et à l'optimisation de code. Éléments d'analyse de programmes en langages évolués : statique, dynamique, dépendances, etc.
PRO1027 Programmation scientifique en C (INF1002 ou PRO1026) Approfondir les concepts fondamentaux de la conception et de la production de logiciel. Développer l'habileté à réaliser des logiciels de qualité. Réaliser des applications pratiques dans le domaine des méthodes numériques. Étude des langages C et C++. Qualité des programmes : clarté, lisibilité, modifiabilité, efficacité, facilité d'usage, robustesse. Programmation modulaire. Programmation en langage C ou C++. A titre indicatif, les applications sont choisies parmi les suivantes : statistiques, manipulation de matrices, résolution de systèmes d'équations linéaires, interpolation, approximation, dérivation et intégration numériques.
SDD1001 Introduction à la science des données Ce cours aborde les langages modernes utilisés en sciences des données comme Python, les bibliothèques de statistiques, de calcul symbolique ainsi que leurs applications. Les langages seront abordés dans les paradigmes orientés objets et fonctionnels.
SDD1002 Modélisation et simulation (STT1001; PIF1005) Ce cours aborde les différentes techniques théoriques et pratiques de simulation, de modélisation, et de visualisation, des données. L'étudiant sera amené à explorer plusieurs outils utilisés dans les sciences des données. Ce cours aborde aussi les notions liées à la généralisation: sous-ajustement, sur-ajustement, validation croisée. Approches: classification, régression, agrégation (clustering). Principaux éléments: Outils de simulation, de visualisation et manipulation de données comme Python ou R ou Orange, ou Tableau, autre.
SIF1033 Traitement d'image (INF1004; STT1001 ou STT1042) Amener l'étudiant à pouvoir utiliser l'ordinateur pour traiter une image de façon à en améliorer la perception visuelle et à permettre la détection d'objets significatifs. Présentation des notions de base du traitement de l'image : correction géométrique et radiométrique des images, amélioration du contraste, amélioration des images par filtrage spatial isotropique et anisotropique, spectral et morphologique; segmentation des images par seuillage; détection des arêtes et des contours, détection des droites et des formes circulaires, détection des objets par corrélation spatiale; génération d'images tomographiques; applications Client/Serveur permettant le traitement d'image à distance; protocoles de transfert d'images. Les étudiants expérimentent les concepts du traitement des images par des projets pratiques codés en langage C ou en langage C++.
Cours complémentaires (9 crédits)
L'étudiant doit suivre les trois cours complémentaires (9 crédits) suivants : INF1040 DUAL I en informatique, INF1041 DUAL II en informatique et INF1042 DUAL III en informatique.Science des données (DUAL)
(Cheminement: 7) À moins d'indication contraire, un cours comporte trois (3) crédits.Cours obligatoires (60 crédits)
INF1001 Programmation Web Permettre à l'étudiant de s'initier aux concepts du Web. A travers des exemples détaillés, l'étudiant apprend à créer et à publier des sites Web en exploitant les nouvelles technologies du Web. Il se familiarise avec les langages de programmation propres au Web. Principaux éléments du Web; langage de balisage, conception de page Web, validation, organisation et gestion d'un site Web, programmation coté client et coté serveur, introduction à XML. Technologies : HTML, CSS, DOM, JavaScript, php. Ce cours utilise les langages HTML, JavaScript, VbScript, XML et l'outil de conception de pages Web EditPlus.INF1002 Introduction à la programmation objet Permettre à l'étudiant de se familiariser avec l'informatique comme discipline et surtout à la programmation impérative et orientée objet. Présentation des structures de commandes, des types, des objets, des structures de données élémentaires (tableau, chaîne de caractères); mécanismes de structuration d'applications : sous-programmes, notions de classe, d'objet, d'application; développement d'applications : choix des données et des algorithmes, codification, compilation, exécution, mise au point de classes et d'applications. Introduction à l'informatique; outils de construction d'application : syntaxe et sémantique d'un langage de haut niveau; variables, types, expressions, affectation; entrée-sortie élémentaire; structures de sélection et d'itération : sous-programmes et passage de paramètres : introduction au paradigme objet : notions de classe, d'objet, d'état et de méthode, d'héritage; algorithmes et résolution de problèmes (problem-solving) : stratégies de solution de problèmes, rôles de l'algorithme dans la résolution de problèmes; stratégies d'implantation; structure de données de base : tableaux, chaînes de caractères; stratégie de vérification : conception de points-tests. Ce cours utilise le langage de programmation Java sur la plate-forme Eclipse. Il comporte 18 heures d'atelier.
INF1004 Structures de données et algorithmes (INF1002) Permettre à l'étudiant de se familiariser avec les structures de données classiques et les algorithmes qui leur sont associés; réaliser des implantations statiques et dynamiques de ces structures : faire l'évaluation de la complexité spatiale et temporelle dans les cas simples; étudier la récursion et la comparer avec l'itération. Revue des concepts élémentaires de programmation; bases de la programmation Objet: encapsulation, dissimulation de l'information; séparation du comportement et de l'implantation; héritage et polymorphisme; conception par héritage et par composition; utilisation de fichiers; les principales structures de données: liste, pile, file, table d'adressage dispersé, arbre, graphe; implantation statique et dynamique; les algorithmes de fouille, de tri, les fonctions de hachage et les stratégies de traitement des collisions, parcours d'arbres et de graphes; le concept de récursion : les fonctions mathématiques récursives; comparaison avec les fonctions itératives correspondantes; implantation de récursion à l'aide de piles; analyse élémentaire de la complexité des algorithmes: complexité spatiale et complexité temporelle; notation "grand O", comportement du meilleur cas, du cas moyen et du pire cas; principales classes de complexité d'algorithmes; stratégies de test pour les classes et les applications. Ce cours utilise le langage de programmation Java et la plateforme Eclipse.
INF1006 Analyse et modélisation (INF1004) Familiariser l'étudiant avec le processus de développement de systèmes informatiques, et plus particulièrement avec les phases initiales. L'initier à l'exercice de l'analyse des besoins, à la spécification et à la modélisation des systèmes ainsi qu'à l'évaluation de ces étapes. Explorer les fondements et l'évolution des méthodes d'analyse. Processus de développement et activités initiales: analyse des besoins et spécifications; importance de l'analyse dans le processus de développement; étude détaillée et application d'une méthode (UML); différentes étapes du processus: analyse des besoins, formalisation et validation; analyse et modélisation orientées objet; outils GLAO (CASE) de modélisation; dossier des spécifications et des exigences d'un logiciel; normes, critères de qualité de la spécification; revue technique; réalisation d'un dossier de spécifications. Le cours comporte 12 heures d'atelier.
INF1007 Conception de logiciels (INF1006) Initier l'étudiant au processus de conception et le sensibiliser à ses difficultés et à son importance. Procéder à l'étude détaillée et à l'application d'une méthode. Permettre à l'étudiant d'élaborer des solutions de qualité. Problématique du processus de conception. Importance de la conception dans le processus de développement. Processus de conception : principes, méthode et notation. Étude détaillée et application d'une méthode. Différentes étapes du processus. Conception et styles d'architectures logicielles. Patrons de conception (GRASP). Qualité de la conception : élaboration de solutions réutilisables, maintenables, extensibles, etc. Conception orientée objet. Caractéristiques d'une bonne conception détaillée (modularité, abstraction, cohésion, couplage, etc.). Outils d'aide à la conception. Documentation de la conception. Revue de la conception. Réalisation d'un projet.
INF1008 Analyse et conception d'algorithmes (ALG1001 ou PIF1005; INF1004) L'étudiant développera son habileté à produire des algorithmes corrects et efficaces. Il pourra analyser la complexité spatiale et temporelle d'un algorithme. Il entrera en contact avec différentes classes d'algorithmes et s'habituera à choisir le type d'algorithme qui convient le mieux à un problème donné. Définition d'un algorithme et de sa complexité. Notations asymptotiques. Résolution de récurrence. Étude d'efficacité et de complexité d'algorithmes de tri. Stratégies de conception d'algorithmes : algorithmes voraces, diviser-pour-régner, programmation dynamique, algorithmes probabilistes, exploration de graphes. Études de cas.
INF1009 Réseaux d'ordinateurs I (SIF1015) Le but du cours est de fournir les bases indispensables à la compréhension des architectures des réseaux informatiques qui permettent l'échange des données entre ordinateurs. Il précise le fonctionnement des réseaux : architecture en couches, protocoles. Étant donné que la connaissance du domaine est compliquée par la richesse du vocabulaire, on présente progressivement les notions et le vocabulaire à l'aide d'exemples simples. Une première partie présente les aspects liés à la transmission des informations : circuits de données, protocoles de liaison, réseaux à circuits virtuels. Une fois les principes présentés, on détaille le formalisme des sept couches OSI : concepts, description du modèle. Une troisième partie est consacrée aux réseaux locaux (Ethernet, Token Ring, Sans fil). Finalement, on explique les principes des réseaux IP.
INF1010 Réseaux d'ordinateurs II (INF1009) Ce cours permet aux étudiants de se familiariser avec les concepts et les contraintes des nouvelles technologies de l'information et des communications. Présentation des spécificités du réseau Internet : services, protocoles, applications, administration; introduction à la gestion sécurisée de l'information et aux techniques et mécanismes de sécurité informatique. Ce cours offre la possibilité aux étudiants de définir, de spécifier et de réaliser des applications clients serveurs sur le réseau Internet et de faire de l'administration de quelques services TCP/IP (DHCP, DNS,…) et des outils réseaux (Switch, routeur,..).
INF1014 Aspects juridiques de l'informatique (1 crédit) L'étudiant se familiarise avec les aspects juridiques de l'informatique. Il apprend à connaître les principales lois touchant la pratique de l'informatique. Il développe l'habileté à analyser des situations de travail de façon à éviter les problèmes juridiques. Notions juridiques : juridiction et territorialité, droit civil et droit pénal. Principales lois touchant la pratique de l'informatique : le droit d'auteur, le respect de la vie privée dans les secteurs public et privé, l'accès à l'information, le cadre juridique des technologies de l'information. Les aspects légaux des licences de produits informatiques. Les aspects légaux particuliers à l'Internet. Règlements pédagogiques particuliers : Pour s'inscrire aux cours TIN1003 Science, technologie et société et INF1014 Aspects juridiques de l'informatique, l'étudiant en informatique doit avoir complété 60 crédits dans le programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
INF1015 Stage d'informatique I L'objectif du cours Stage d'informatique I est de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1015 Stage d'informatique I, l'étudiant doit avoir réussi obligatoirement 45 crédits du programme.
INF1016 Stage d'informatique II Les objectifs du cours Stage d'informatique II sont de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail et de parfaire l'acquisition des méthodes de travail propres à l'informatique. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant en informatique doit avoir réussi obligatoirement 60 crédits du programme et le cours INF1015 Stage d'informatique I. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours GMA1001 Stages. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en physique et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours INF1015 Stage d'informatique I.
INF1034 Introduction aux interfaces utilisateur (INF1002) Amener l'étudiant à comprendre le comportement humain dans son interaction avec un environnement logiciel interactif, à développer une interface utilisateur simple et à évaluer l'ergonomie d'un logiciel interactif. Concepts de base de l'ergonomie du logiciel et des interactions personne-machine : modèles, principes et lignes directrices; introduction à la conception d'interfaces utilisateur : processus, outils, méthodologie et normes; outils de développement d'interfaces graphiques : utilisation des contrôles et des objets prédéfinis, propriétés, méthodes et gestion des événements; évaluation des interfaces : test, enquête et expérimentation. Ce cours comporte des exercices en Java.
INF1035 Concepts avancés en objet (INF1004) Amener l'étudiant à comprendre les mécanismes du développement orienté-objet. Maîtriser les concepts relatifs au paradigme objet. Utiliser un environnement de développement (IDE). Utiliser le paradigme de programmation événementielle. Utiliser les principes (et mécanismes) de la programmation par contrat. Intégrer la programmation aspect. Etude des notions importantes de la programmation orientée-objet : héritage simple et multiple, hiérarchie des classes, polymorphisme, notion de liaison statique et de liaison dynamique, etc. Notion d'interface et de classe abstraite. Notion d'extension de classes. Généricité. Pattern de conception (GoF). Refactoring. Notions de robustesse et de sécurité dans les applications. Programmation événementielle : événements, messages, gestion des exceptions. Programmation par contrats. Programmation aspect : notions d'aspect, de poincut, de point de jointure et d'advice. Les langages utilisés dans ce cours sont C#, Java et AspectJ (à titre comparatif). Les environnements de développement sont les plateformes Eclipse et Visuel C#. Le cours comporte 18 heures d'atelier.
PIF1005 Mathématiques pour informaticiens I Ce cours vise à introduire les concepts mathématiques fondamentaux en informatique. Rappels mathématiques : calcul avec les nombres réels, inégalités, logarithmes; théorie des ensembles : relations, fonctions, relations d'ordre; logique : techniques de preuve; algèbre booléenne ; graphes; induction mathématique.
PIF1006 Mathématiques pour informaticiens II (PIF1005) Ce cours vise à compléter la formation de base en mathématiques en vue d'applications en informatique. Algèbre matricielle : opérations, déterminant et matrice inverse; concepts d'analyse numérique : représentation des nombres et erreur, interpolation et approximation; langages formels : langage et grammaire, machine à états finis avec et sans sorties , équivalence d'automates, automate fini non déterministe, expression régulière, machine de Turing; cryptographie : schéma de cryptage, authentification, identification, cryptographie à clé secrète, cryptographie à clé publique; codage et compression de données : techniques de compression, compression sans perte (code de Hoffman), compression avec perte (compression JPEG). Ce cours comporte des travaux avec le logiciel Matlab.
SIF1015 Systèmes d'exploitation L'étudiant se familiarise avec les concepts fondamentaux des systèmes d'exploitation : structure générale d'un système d'exploitation, gestion des différents sous-systèmes : processus/thread, communication inter-processus/thread, systèmes de fichiers, accès réseau, gestion de la mémoire. Gestion des processus et des threads; gestion des entrées/sorties tels que les dispositifs Windows; communication inter-processus : tubes anonymes et nommés, files de messages, sockets, signaux; introduction aux principes de fonctionnement d'un système de fichiers; introduction aux concepts de la gestion de la mémoire; introduction à la communication réseau par sockets. Les étudiants expérimentent les concepts théoriques par des projets de développement d'utilitaires dans un environnement de développement ouvert sous une plateforme telle que UNIX/LINUX/ANDROID. Règlement pédagogique particulier : Pour les étudiants du baccalauréat en génie électrique (concentration génie informatique) (7144) le préalable est GEI1072 Résolution de problèmes d'ingénierie en C. Pour les étudiants du baccalauréat en informatique (7833) les préalables sont INF1004 Structures de données et algorithmes et SIF1053 Architecture des ordinateurs.
SIF1053 Architecture des ordinateurs L'étudiant prendra connaissance des éléments fondamentaux des architectures et des composantes des ordinateurs modernes tant statiques que mobiles (ex : architectures ARM, X86, x86-64), des organes périphériques. Etude des composantes des ordinateurs modernes: mémoire, circuits et représentation de l'information. Unité de commande, représentation des instructions machine, notions d'adressage, notions de microprogrammation et machine virtuelle. Unité arithmétique et logiques. Introduction des notions de communication série et parallèle.
SMI1001 Bases de données I Le cours vise à donner une solide introduction tant théorique que pratique aux concepts informatiques fondamentaux ayant trait aux bases de données, particulièrement aux bases de données relationnelles. Outre la modélisation des données qui constitue une partie importante de ce cours, l'apprentissage du langage SQL et d'un SGBD (Système de Gestion de Bases de Données) moderne seront également des objectifs importants de ce cours. Introduction aux bases de données : modèles et langages, les différents utilisateurs et leurs besoins, structure et architecture des SGBD. Le modèle Entité-Relation, modélisation UML. Le modèle relationnel : aperçu de l'algèbre et du calcul relationnel, notion de vue. Le langage SQL, aperçu d'autres langages relationnels. Les contraintes d'intégrité, les données manquantes et les valeurs nulles. La conception des bases de données relationnelles, dépendances fonctionnelles, dépendances multivaluées, dépendances de jointure, normalisation, formes normales 1FN, 2FN, 3FN, FNBC, 4FN et 5FN. Autres types de bases de données : relationnelles-objets et multidimensionnelles. Introduction aux données multimédias et XML. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'utilitaire TOAD. Le cours comporte 18 heures d'atelier.
SMI1002 Bases de données II (SMI1001) Le cours porte principalement sur des considérations techniques sous-jacentes à l'utilisation ou à la conception des SGBD, toujours dans le contexte du SGBD Oracle qui sert d'illustration et de contexte de mise en pratique des concepts. L'étudiant aura donc l'opportunité d'approfondir sa compréhension du fonctionnement interne d'un SGBD, notamment de Oracle, et d'autres aspects complémentaires associés à l'exploitation des données. Stockage et structures de fichiers, indexation et fonctions de hachage. Traitement et optimisation des requêtes. Traitement des transactions. Contrôle de la concurrence. Systèmes de recouvrement. Sécurité, contrôle des accès et encryptage. Bases de données et applications Web, modèles client-serveur et multitiers. Architectures des SGBD, bases de données parallèles et distribuées. Analyses des données, OLAP (on-line analytical processing), entreposage (warehousing) et forage (mining) de données. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'interface JSP (Java Sever Page).
STT1001 Probabilités et statistiques Statistiques de base en vue des applications. Séries statistiques : histogramme et polygone. Mesures de tendance centrale. Mesures de dispersion. Moments. Eléments de probabilités : variables aléatoires, distributions binomiales, hypergéométriques, normales. Poisson. Introduction à l'échantillonnage. Tests d'hypothèses simples.
TIN1003 Science, technologie et société (2 crédits) Identifier les effets inducteurs et destructeurs des innovations scientifiques et technologiques sur la société contemporaine; provoquer une réflexion critique sur la viabilité sociale des technologies nouvelles; préparer les étudiants à accepter la responsabilité sociale qui incombe à la future « intelligence technique supérieure ». Introduire aux thèmes principaux de la philosophie de la technique en étudiant les visages multiples de la technologie moderne et en examinant ses rapports avec les différentes dimensions impliquées dans le concept « qualité de vie ». Présenter une méthodologie pour l'analyse de risque : formes de risque (physiques, personnels, sociaux), méthodes d'évaluation de choix technologiques et de détermination de la viabilité sociale de ces technologies. Proposer et discuter des modèles de prises de décision dans l'allocation de ressources technologiques et l'implantation de technologies nouvelles (avec applications particulières à l'informatique, la robotique, etc.). Identifier les principes fondamentaux devant être respectés dans l'implantation de ces technologies. Circonscrire la fonction nouvelle et la responsabilité sociales de l'ingénieur. Règlement pédagogique particulier : Pour s'inscrire à ce cours, l'étudiant en informatique doit avoir réussi 60 crédits du programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
Cours optionnels (21 crédits)
L’étudiant doit suivre les cours suivants (15 crédits) : INF1043 Sujets spéciaux DUAL Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en développement de logiciel, en développement d’applications mobiles, en science des données ou en cybersécurité et infonuagique et qui ne sont pas nécessairement vues ou approfondies dans le programme. Ce cours s'adresse aux étudiants de l’option DUAL du programme de baccalauréat en informatique. Il s'agit de faire de la formation de contenu au sein de l'entreprise qui accueille l'étudiant dans le cadre de l'entente DUAL. Elle est aussi encadrée par un professeur du programme.SDD1001 Introduction à la science des données Ce cours aborde les langages modernes utilisés en sciences des données comme Python, les bibliothèques de statistiques, de calcul symbolique ainsi que leurs applications. Les langages seront abordés dans les paradigmes orientés objets et fonctionnels.
SDD1002 Modélisation et simulation (STT1001; PIF1005) Ce cours aborde les différentes techniques théoriques et pratiques de simulation, de modélisation, et de visualisation, des données. L'étudiant sera amené à explorer plusieurs outils utilisés dans les sciences des données. Ce cours aborde aussi les notions liées à la généralisation: sous-ajustement, sur-ajustement, validation croisée. Approches: classification, régression, agrégation (clustering). Principaux éléments: Outils de simulation, de visualisation et manipulation de données comme Python ou R ou Orange, ou Tableau, autre.
SDD1003 Gestion des entrepôts de données (SMI1002; INF1004) Les bases de données non relationnelles n’incorporent pas le modèle table/clé que les systèmes de gestion de base de données relationnelles promeuvent. Ce cours permet à l’étudiant de comprendre, de modéliser et de manipuler les données de masse à l’aide des nouvelles technologies de Bases de données (BD) non relationnelles. Aussi, l’étudiant sera introduit à comment lire et manipuler les données des bases de données non relationnelles dans des applications web. L’architecture des données et l’optimisation des requêtes seront également abordées. Les exemples de base de données abordées sont les Bases de données documents et les Bases de données clé-valeur.
SDD1004 Apprentissage Automatique et applications (SDD1002) Cadre théorique et pratique des algorithmes d'apprentissage automatique (comme machine à vecteurs de support (SVM)) entraînement, validation. Introduction à la modélisation et aux algorithmes d'apprentissage machine basée sur les données (apprentissage par l'exemple). Algorithmes: voisin le plus proche (comme KNN), régression linéaire et linéaire généralisée, mixtures de Gaussiennes, processus Gaussien, méthodes de noyaux. Introduction à l'apprentissage profond.
L’étudiant doit suivre un ou deux cours (3 ou 6 crédits) parmi les cours d’informatique suivants (6 ou 9 crédits) : INF1020 Commerce électronique Ce cours a comme objectif principal l'initiation aux concepts de base des affaires et du commerce électronique et leur mise en pratique dans la réalisation d'un projet de commerce électronique. Le cours a aussi comme objectifs secondaires : d'apprendre à gérer un projet d'équipe en informatique. Aperçu du commerce électronique; la "digitalisation" des affaires; les processus et stratégies B2B (business-to-business); le rôle des intermédiaires indépendants (third parties); l'environnement régulateur; EDI, e-commerce et Internet; risques des systèmes non-sécuritaires; risques de gestion; normes, protocoles et langages Internet; cryptographie et authentification; murs coupe-feu (firewalls); mécanismes de paiement en ligne pour le e-commerce; agents intelligents; le marketing sur le Web; autres sujets d'actualité en affaires et en commerce électronique. Règlement pédagogique particulier : Pour s'inscrire au cours INF1020 Commerce électronique, les étudiants inscrits au cheminement DEC-BAC (7533) doivent avoir réussi les cours obligatoires de la première session. Les étudiants inscrits au double baccalauréat : mathématiques et informatique (6833) ou inscrits au double baccalauréat en physique et en informatique (6925) doivent avoir réussi les cours obligatoires des cinq (5) premières sessions.
INF1021 Les architectures réparties (INF1009) Ce cours permet d'acquérir des connaissances sur les systèmes répartis. Il permet aux étudiants de s'initier aux méthodes de conception et de réalisation des applications informatiques réparties. À la fin du cours, les étudiants seront capables de comparer plusieurs méthodes de réalisation de systèmes répartis. Utilisation des SOCKETS : rappel sur le protocole TCP; interface Java de manipulation des sockets (Java.net); réalisation d'applications clients serveurs. Utilisation de Java RMI : introduction à RMI (Remote Method Invocation); implémentation des objets, côté client et côté serveur. Introduction à CORBA : évolution vers les applications distribuées; protocole RPC (Remote Procedure Calls); norme CORBA; implémentation du client et de l'objet distribué CORBA. Agents intelligents : concept d'agent; agents coopératifs, rationnels, adaptatifs, mobiles; agents informationnels intelligents; agents pour le Web; sécurité, mobilité, aspects algorithmiques. XML (eXtensible Markup Language) : SGML, HTML, XML et le Web; EDI et XML pour les applications d'affaires électroniques; définitions de nouveaux langages basés sur XML; technologies et applications XML; protocoles de communication basés sur le XML.
INF1030 Introduction au développement d'applications mobiles (version Android) (INF1005 ou INF1035) Dans ce cours, l'étudiant sera amené à comprendre le cycle de développement d'applications mobiles. Utilisant le langage Java, les étudiants pourront créer des programmes tant standalone que déployés sur des plateformes mobiles. L'emphase sera mise sur les apprentissages des meilleurs pratiques de développement d'application mobiles et ce dans le but de faciliter et d'augmenter l'efficacité de ce développement. Les étudiants pourront aussi comprendre le fonctionnement de la machine virtuelle Dalvik comme plateforme pour le développement d'applications Android.
SDD1005 Probabilité & Inférence (SDD1002 ou STT1001 ou STT1042) Ce cours aborde les différentes techniques théoriques et pratiques de la décision, Files d'attente, chaînes de Markov et réseaux Bayésiens.
SIF1033 Traitement d'image (INF1004; STT1001 ou STT1042) Amener l'étudiant à pouvoir utiliser l'ordinateur pour traiter une image de façon à en améliorer la perception visuelle et à permettre la détection d'objets significatifs. Présentation des notions de base du traitement de l'image : correction géométrique et radiométrique des images, amélioration du contraste, amélioration des images par filtrage spatial isotropique et anisotropique, spectral et morphologique; segmentation des images par seuillage; détection des arêtes et des contours, détection des droites et des formes circulaires, détection des objets par corrélation spatiale; génération d'images tomographiques; applications Client/Serveur permettant le traitement d'image à distance; protocoles de transfert d'images. Les étudiants expérimentent les concepts du traitement des images par des projets pratiques codés en langage C ou en langage C++.
L’étudiant peut suivre un cours (3 crédits) parmi les cours d’informatique des cheminements (01), (02) et (04) suivants : CSE1001 Introduction à la cybersécurité (INF1001; INF1004) Ce cours permettra à l’étudiant de prendre conscience des problématiques et des enjeux critiques en cybersécurité. L’étudiant pourra se familiariser avec les concepts de base et acquérir les connaissances essentielles dans divers domaines d’expertise de la cybersécurité. Il aura l’occasion d’explorer les différentes techniques permettant de sécuriser les données. Ce cours aborde principalement les volets suivants: Enjeux, Modèles de sécurité, Triade CIA, Identification des actifs informationnels et analyse de risque, Cybermenaces et mécanismes de cyberdéfense, Étude des vulnérabilités, exploitation et contre-mesures, Hachage, Cryptosystèmes, Protocoles cryptographiques, Spécification des politiques de sécurité, Modèles de contrôle d’accès, Authentification.
INF1011 Génie logiciel (INF1007) Familiariser l'étudiant avec les concepts et principes fondamentaux du génie logiciel et le sensibiliser à leur importance dans la production de logiciels de qualité. Amener l'étudiant à une compréhension des principes de base de l'assurance qualité. Principes et concepts fondamentaux du Génie Logiciel. Produit logiciel: caractéristiques. Processus de génie logiciel. Modèles de cycle de vie. Prototypage. Normes. Maturité des processus. Processus léger. Méthodes Agiles. Réutilisation de logiciel. Concepts favorisant la réutilisation - Pattern, COO, paradigme aspect. Entités réutilisable - lignes de produits logiciels, composants, produits COTS. Assurance qualité logiciel : Principes et Techniques. Processus de validation et de vérification : définition, rôles, techniques, impact sur la qualité, etc. Processus de test : techniques et stratégies. Planification, conception et réalisation des tests. Techniques de revues, Preuves, etc. Concepts et principes de la qualité. Contrôle de la qualité : qualité et métriques. Gestion de projets. Maintenance. Réingénierie. Documentation technique.
INF1012 Élaboration et gestion de projets scientifiques (INF1011) Identifier et analyser les conséquences de l'innovation technologique et de la recherche et développement en sciences. Acquérir des connaissances et des techniques de travail en situation de projets informatiques. Développer l'aptitude à planifier de tels projets, à y participer et, éventuellement, à les gérer. Développer l'habileté à gérer son temps et celui de ses collaborateurs. Se familiariser à la dimension internationale de la gestion des projets. Les différentes formes d'innovation technologique. Évaluation des impacts positifs et négatifs de l'innovation technologique et de la recherche et développement en sciences : étude coût/bénéfice, impact sur les individus, la communauté scientifique et la société. Gestion de projets informatiques : identification des objectifs et définition du projet, élaboration de solutions à caractère scientifique, planification des activités, échéanciers; choix de l'équipe, attribution des responsabilités; importance de la coordination en environnement de projet; suivi des activités et gestion du temps; progiciels de gestion de projets.
INF1013 Environnement de développement et composantes logicielles (INF1005 ou INF1035; SIF1015) Compléter la formation des étudiants en lien avec les méthodologies et technologies de développement des applications Frame/Web d'envergure. Apprendre à construire des composants réutilisables en s'appuyant sur des bibliothèques existantes. Réaliser les applications Web et Frame selon les modèles MVC/MVP ainsi que des Application Serveur sous forme d'APE RESTFUL. Utiliser et configurer des environnements de développement pour de grands projets logiciels. Maîtriser les gestionnaires de dépendances de projets. Open Source/Propriétaires. Quelques-unes des technologies importantes seront utilisées : C# - ASP.Net, Java-JSP, Python-DJANGO, Ruby-Rails, GWT, ANGULAR, REACT, Maven, Gradle, etc.
INF1018 Analyse de programmes (INF1035) Présenter à l'étudiant les principes et les techniques de base de l'implantation des langages de programmation. L'initier à l'évaluation des langages de programmation et à l'analyse de programmes. Familiariser l'étudiant avec certains outils de description et d'analyse des langages de programmation. Étude des langages de programmation dans l'optique de construction d'outils d'environnement de programmation. Concepts fondamentaux des langages de programmation modernes. Classification et évaluation des langages de programmation. Concepts et critères de qualité. Syntaxe et sémantique des langages de programmation. Méthodes de description formelles. Grammaire et Langages. Méthodes d'analyse lexicale et syntaxique : principes, approches et applications. Outils pour le traitement des langages. Analyse sémantique. Introduction à la génération et à l'optimisation de code. Éléments d'analyse de programmes en langages évolués : statique, dynamique, dépendances, etc.
INF1032 Introduction au développement d'applications mobiles (plateforme IOS) (INF1005 ou INF1035) Dans ce cours, l'étudiant sera amené à comprendre le cycle de développement d'applications mobile. Utilisant le langage Objective C, les étudiants pourront créer des programmes tant standalone que déployés sur des plateformes mobiles. L'emphase sera mise sur les apprentissages des meilleurs pratiques de développement d'application mobiles et ce dans le but de faciliter et d'augmenter l'efficacité de ce développement. Les étudiants pourront aussi apprendre comment développer des applications sur des plateformes mobiles IOS (ex : IPhone et IPad).
PRO1027 Programmation scientifique en C (INF1002 ou PRO1026) Approfondir les concepts fondamentaux de la conception et de la production de logiciel. Développer l'habileté à réaliser des logiciels de qualité. Réaliser des applications pratiques dans le domaine des méthodes numériques. Étude des langages C et C++. Qualité des programmes : clarté, lisibilité, modifiabilité, efficacité, facilité d'usage, robustesse. Programmation modulaire. Programmation en langage C ou C++. A titre indicatif, les applications sont choisies parmi les suivantes : statistiques, manipulation de matrices, résolution de systèmes d'équations linéaires, interpolation, approximation, dérivation et intégration numériques.
SIF1032 Graphisme par ordinateur (MAP1006 ou PIF1006; INF1004) L'étudiant se familiarise avec les algorithmes fondamentaux du graphisme : représentation des objets 2D et 3D. Il est amené à comprendre les concepts de transformation linéaire en coordonnées homogènes, la composition des transformations et le calcul matriciel, la transformation en perspective, les modèles de réflexion de la lumière, la couleur, l'illumination et le rendu, l'ajout de texture. Création de modèles d'objets simples, formes polygonales; création de modèles plus complexes à l'aide de moteurs de formes; application de transformations 3D pour la visualisation et les déplacements d'objets 3D; introduction aux notions de réalisme d'une scène : illumination, couleur, propriétés des objets : texture, transparence. Le cours comporte des projets pratiques d'animation réalisés en langage C, en langage C++ à l'aide des libraires graphiques OpenGl et DirectX
Cours complémentaires (9 crédits)
L'étudiant doit suivre les trois cours complémentaires (9 crédits) suivants : INF1040 DUAL I en informatique, INF1041 DUAL II en informatique et INF1042 DUAL III en informatique.Cybersécurité et infonuagique (DUAL)
(Cheminement: 8) À moins d'indication contraire, un cours comporte trois (3) crédits.Cours obligatoires (60 crédits)
INF1001 Programmation Web Permettre à l'étudiant de s'initier aux concepts du Web. A travers des exemples détaillés, l'étudiant apprend à créer et à publier des sites Web en exploitant les nouvelles technologies du Web. Il se familiarise avec les langages de programmation propres au Web. Principaux éléments du Web; langage de balisage, conception de page Web, validation, organisation et gestion d'un site Web, programmation coté client et coté serveur, introduction à XML. Technologies : HTML, CSS, DOM, JavaScript, php. Ce cours utilise les langages HTML, JavaScript, VbScript, XML et l'outil de conception de pages Web EditPlus.INF1002 Introduction à la programmation objet Permettre à l'étudiant de se familiariser avec l'informatique comme discipline et surtout à la programmation impérative et orientée objet. Présentation des structures de commandes, des types, des objets, des structures de données élémentaires (tableau, chaîne de caractères); mécanismes de structuration d'applications : sous-programmes, notions de classe, d'objet, d'application; développement d'applications : choix des données et des algorithmes, codification, compilation, exécution, mise au point de classes et d'applications. Introduction à l'informatique; outils de construction d'application : syntaxe et sémantique d'un langage de haut niveau; variables, types, expressions, affectation; entrée-sortie élémentaire; structures de sélection et d'itération : sous-programmes et passage de paramètres : introduction au paradigme objet : notions de classe, d'objet, d'état et de méthode, d'héritage; algorithmes et résolution de problèmes (problem-solving) : stratégies de solution de problèmes, rôles de l'algorithme dans la résolution de problèmes; stratégies d'implantation; structure de données de base : tableaux, chaînes de caractères; stratégie de vérification : conception de points-tests. Ce cours utilise le langage de programmation Java sur la plate-forme Eclipse. Il comporte 18 heures d'atelier.
INF1004 Structures de données et algorithmes (INF1002) Permettre à l'étudiant de se familiariser avec les structures de données classiques et les algorithmes qui leur sont associés; réaliser des implantations statiques et dynamiques de ces structures : faire l'évaluation de la complexité spatiale et temporelle dans les cas simples; étudier la récursion et la comparer avec l'itération. Revue des concepts élémentaires de programmation; bases de la programmation Objet: encapsulation, dissimulation de l'information; séparation du comportement et de l'implantation; héritage et polymorphisme; conception par héritage et par composition; utilisation de fichiers; les principales structures de données: liste, pile, file, table d'adressage dispersé, arbre, graphe; implantation statique et dynamique; les algorithmes de fouille, de tri, les fonctions de hachage et les stratégies de traitement des collisions, parcours d'arbres et de graphes; le concept de récursion : les fonctions mathématiques récursives; comparaison avec les fonctions itératives correspondantes; implantation de récursion à l'aide de piles; analyse élémentaire de la complexité des algorithmes: complexité spatiale et complexité temporelle; notation "grand O", comportement du meilleur cas, du cas moyen et du pire cas; principales classes de complexité d'algorithmes; stratégies de test pour les classes et les applications. Ce cours utilise le langage de programmation Java et la plateforme Eclipse.
INF1006 Analyse et modélisation (INF1004) Familiariser l'étudiant avec le processus de développement de systèmes informatiques, et plus particulièrement avec les phases initiales. L'initier à l'exercice de l'analyse des besoins, à la spécification et à la modélisation des systèmes ainsi qu'à l'évaluation de ces étapes. Explorer les fondements et l'évolution des méthodes d'analyse. Processus de développement et activités initiales: analyse des besoins et spécifications; importance de l'analyse dans le processus de développement; étude détaillée et application d'une méthode (UML); différentes étapes du processus: analyse des besoins, formalisation et validation; analyse et modélisation orientées objet; outils GLAO (CASE) de modélisation; dossier des spécifications et des exigences d'un logiciel; normes, critères de qualité de la spécification; revue technique; réalisation d'un dossier de spécifications. Le cours comporte 12 heures d'atelier.
INF1007 Conception de logiciels (INF1006) Initier l'étudiant au processus de conception et le sensibiliser à ses difficultés et à son importance. Procéder à l'étude détaillée et à l'application d'une méthode. Permettre à l'étudiant d'élaborer des solutions de qualité. Problématique du processus de conception. Importance de la conception dans le processus de développement. Processus de conception : principes, méthode et notation. Étude détaillée et application d'une méthode. Différentes étapes du processus. Conception et styles d'architectures logicielles. Patrons de conception (GRASP). Qualité de la conception : élaboration de solutions réutilisables, maintenables, extensibles, etc. Conception orientée objet. Caractéristiques d'une bonne conception détaillée (modularité, abstraction, cohésion, couplage, etc.). Outils d'aide à la conception. Documentation de la conception. Revue de la conception. Réalisation d'un projet.
INF1008 Analyse et conception d'algorithmes (ALG1001 ou PIF1005; INF1004) L'étudiant développera son habileté à produire des algorithmes corrects et efficaces. Il pourra analyser la complexité spatiale et temporelle d'un algorithme. Il entrera en contact avec différentes classes d'algorithmes et s'habituera à choisir le type d'algorithme qui convient le mieux à un problème donné. Définition d'un algorithme et de sa complexité. Notations asymptotiques. Résolution de récurrence. Étude d'efficacité et de complexité d'algorithmes de tri. Stratégies de conception d'algorithmes : algorithmes voraces, diviser-pour-régner, programmation dynamique, algorithmes probabilistes, exploration de graphes. Études de cas.
INF1009 Réseaux d'ordinateurs I (SIF1015) Le but du cours est de fournir les bases indispensables à la compréhension des architectures des réseaux informatiques qui permettent l'échange des données entre ordinateurs. Il précise le fonctionnement des réseaux : architecture en couches, protocoles. Étant donné que la connaissance du domaine est compliquée par la richesse du vocabulaire, on présente progressivement les notions et le vocabulaire à l'aide d'exemples simples. Une première partie présente les aspects liés à la transmission des informations : circuits de données, protocoles de liaison, réseaux à circuits virtuels. Une fois les principes présentés, on détaille le formalisme des sept couches OSI : concepts, description du modèle. Une troisième partie est consacrée aux réseaux locaux (Ethernet, Token Ring, Sans fil). Finalement, on explique les principes des réseaux IP.
INF1010 Réseaux d'ordinateurs II (INF1009) Ce cours permet aux étudiants de se familiariser avec les concepts et les contraintes des nouvelles technologies de l'information et des communications. Présentation des spécificités du réseau Internet : services, protocoles, applications, administration; introduction à la gestion sécurisée de l'information et aux techniques et mécanismes de sécurité informatique. Ce cours offre la possibilité aux étudiants de définir, de spécifier et de réaliser des applications clients serveurs sur le réseau Internet et de faire de l'administration de quelques services TCP/IP (DHCP, DNS,…) et des outils réseaux (Switch, routeur,..).
INF1014 Aspects juridiques de l'informatique (1 crédit) L'étudiant se familiarise avec les aspects juridiques de l'informatique. Il apprend à connaître les principales lois touchant la pratique de l'informatique. Il développe l'habileté à analyser des situations de travail de façon à éviter les problèmes juridiques. Notions juridiques : juridiction et territorialité, droit civil et droit pénal. Principales lois touchant la pratique de l'informatique : le droit d'auteur, le respect de la vie privée dans les secteurs public et privé, l'accès à l'information, le cadre juridique des technologies de l'information. Les aspects légaux des licences de produits informatiques. Les aspects légaux particuliers à l'Internet. Règlements pédagogiques particuliers : Pour s'inscrire aux cours TIN1003 Science, technologie et société et INF1014 Aspects juridiques de l'informatique, l'étudiant en informatique doit avoir complété 60 crédits dans le programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
INF1015 Stage d'informatique I L'objectif du cours Stage d'informatique I est de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1015 Stage d'informatique I, l'étudiant doit avoir réussi obligatoirement 45 crédits du programme.
INF1016 Stage d'informatique II Les objectifs du cours Stage d'informatique II sont de permettre à l'étudiant d'appliquer ses connaissances en informatique en milieu de travail et de parfaire l'acquisition des méthodes de travail propres à l'informatique. La durée normale du stage est de 12 à 16 semaines à temps plein. Règlement pédagogique particulier : Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant en informatique doit avoir réussi obligatoirement 60 crédits du programme et le cours INF1015 Stage d'informatique I. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours GMA1001 Stages. Pour s'inscrire au cours INF1016 Stage d'informatique II, l'étudiant inscrit au double baccalauréat en physique et en informatique doit avoir réussi obligatoirement 90 crédits du programme et le cours INF1015 Stage d'informatique I.
INF1034 Introduction aux interfaces utilisateur (INF1002) Amener l'étudiant à comprendre le comportement humain dans son interaction avec un environnement logiciel interactif, à développer une interface utilisateur simple et à évaluer l'ergonomie d'un logiciel interactif. Concepts de base de l'ergonomie du logiciel et des interactions personne-machine : modèles, principes et lignes directrices; introduction à la conception d'interfaces utilisateur : processus, outils, méthodologie et normes; outils de développement d'interfaces graphiques : utilisation des contrôles et des objets prédéfinis, propriétés, méthodes et gestion des événements; évaluation des interfaces : test, enquête et expérimentation. Ce cours comporte des exercices en Java.
INF1035 Concepts avancés en objet (INF1004) Amener l'étudiant à comprendre les mécanismes du développement orienté-objet. Maîtriser les concepts relatifs au paradigme objet. Utiliser un environnement de développement (IDE). Utiliser le paradigme de programmation événementielle. Utiliser les principes (et mécanismes) de la programmation par contrat. Intégrer la programmation aspect. Etude des notions importantes de la programmation orientée-objet : héritage simple et multiple, hiérarchie des classes, polymorphisme, notion de liaison statique et de liaison dynamique, etc. Notion d'interface et de classe abstraite. Notion d'extension de classes. Généricité. Pattern de conception (GoF). Refactoring. Notions de robustesse et de sécurité dans les applications. Programmation événementielle : événements, messages, gestion des exceptions. Programmation par contrats. Programmation aspect : notions d'aspect, de poincut, de point de jointure et d'advice. Les langages utilisés dans ce cours sont C#, Java et AspectJ (à titre comparatif). Les environnements de développement sont les plateformes Eclipse et Visuel C#. Le cours comporte 18 heures d'atelier.
PIF1005 Mathématiques pour informaticiens I Ce cours vise à introduire les concepts mathématiques fondamentaux en informatique. Rappels mathématiques : calcul avec les nombres réels, inégalités, logarithmes; théorie des ensembles : relations, fonctions, relations d'ordre; logique : techniques de preuve; algèbre booléenne ; graphes; induction mathématique.
PIF1006 Mathématiques pour informaticiens II (PIF1005) Ce cours vise à compléter la formation de base en mathématiques en vue d'applications en informatique. Algèbre matricielle : opérations, déterminant et matrice inverse; concepts d'analyse numérique : représentation des nombres et erreur, interpolation et approximation; langages formels : langage et grammaire, machine à états finis avec et sans sorties , équivalence d'automates, automate fini non déterministe, expression régulière, machine de Turing; cryptographie : schéma de cryptage, authentification, identification, cryptographie à clé secrète, cryptographie à clé publique; codage et compression de données : techniques de compression, compression sans perte (code de Hoffman), compression avec perte (compression JPEG). Ce cours comporte des travaux avec le logiciel Matlab.
SIF1015 Systèmes d'exploitation L'étudiant se familiarise avec les concepts fondamentaux des systèmes d'exploitation : structure générale d'un système d'exploitation, gestion des différents sous-systèmes : processus/thread, communication inter-processus/thread, systèmes de fichiers, accès réseau, gestion de la mémoire. Gestion des processus et des threads; gestion des entrées/sorties tels que les dispositifs Windows; communication inter-processus : tubes anonymes et nommés, files de messages, sockets, signaux; introduction aux principes de fonctionnement d'un système de fichiers; introduction aux concepts de la gestion de la mémoire; introduction à la communication réseau par sockets. Les étudiants expérimentent les concepts théoriques par des projets de développement d'utilitaires dans un environnement de développement ouvert sous une plateforme telle que UNIX/LINUX/ANDROID. Règlement pédagogique particulier : Pour les étudiants du baccalauréat en génie électrique (concentration génie informatique) (7144) le préalable est GEI1072 Résolution de problèmes d'ingénierie en C. Pour les étudiants du baccalauréat en informatique (7833) les préalables sont INF1004 Structures de données et algorithmes et SIF1053 Architecture des ordinateurs.
SIF1053 Architecture des ordinateurs L'étudiant prendra connaissance des éléments fondamentaux des architectures et des composantes des ordinateurs modernes tant statiques que mobiles (ex : architectures ARM, X86, x86-64), des organes périphériques. Etude des composantes des ordinateurs modernes: mémoire, circuits et représentation de l'information. Unité de commande, représentation des instructions machine, notions d'adressage, notions de microprogrammation et machine virtuelle. Unité arithmétique et logiques. Introduction des notions de communication série et parallèle.
SMI1001 Bases de données I Le cours vise à donner une solide introduction tant théorique que pratique aux concepts informatiques fondamentaux ayant trait aux bases de données, particulièrement aux bases de données relationnelles. Outre la modélisation des données qui constitue une partie importante de ce cours, l'apprentissage du langage SQL et d'un SGBD (Système de Gestion de Bases de Données) moderne seront également des objectifs importants de ce cours. Introduction aux bases de données : modèles et langages, les différents utilisateurs et leurs besoins, structure et architecture des SGBD. Le modèle Entité-Relation, modélisation UML. Le modèle relationnel : aperçu de l'algèbre et du calcul relationnel, notion de vue. Le langage SQL, aperçu d'autres langages relationnels. Les contraintes d'intégrité, les données manquantes et les valeurs nulles. La conception des bases de données relationnelles, dépendances fonctionnelles, dépendances multivaluées, dépendances de jointure, normalisation, formes normales 1FN, 2FN, 3FN, FNBC, 4FN et 5FN. Autres types de bases de données : relationnelles-objets et multidimensionnelles. Introduction aux données multimédias et XML. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'utilitaire TOAD. Le cours comporte 18 heures d'atelier.
SMI1002 Bases de données II (SMI1001) Le cours porte principalement sur des considérations techniques sous-jacentes à l'utilisation ou à la conception des SGBD, toujours dans le contexte du SGBD Oracle qui sert d'illustration et de contexte de mise en pratique des concepts. L'étudiant aura donc l'opportunité d'approfondir sa compréhension du fonctionnement interne d'un SGBD, notamment de Oracle, et d'autres aspects complémentaires associés à l'exploitation des données. Stockage et structures de fichiers, indexation et fonctions de hachage. Traitement et optimisation des requêtes. Traitement des transactions. Contrôle de la concurrence. Systèmes de recouvrement. Sécurité, contrôle des accès et encryptage. Bases de données et applications Web, modèles client-serveur et multitiers. Architectures des SGBD, bases de données parallèles et distribuées. Analyses des données, OLAP (on-line analytical processing), entreposage (warehousing) et forage (mining) de données. Ce cours utilise le système de gestion de bases de données Oracle, le langage PL/SQL et l'interface JSP (Java Sever Page).
STT1001 Probabilités et statistiques Statistiques de base en vue des applications. Séries statistiques : histogramme et polygone. Mesures de tendance centrale. Mesures de dispersion. Moments. Eléments de probabilités : variables aléatoires, distributions binomiales, hypergéométriques, normales. Poisson. Introduction à l'échantillonnage. Tests d'hypothèses simples.
TIN1003 Science, technologie et société (2 crédits) Identifier les effets inducteurs et destructeurs des innovations scientifiques et technologiques sur la société contemporaine; provoquer une réflexion critique sur la viabilité sociale des technologies nouvelles; préparer les étudiants à accepter la responsabilité sociale qui incombe à la future « intelligence technique supérieure ». Introduire aux thèmes principaux de la philosophie de la technique en étudiant les visages multiples de la technologie moderne et en examinant ses rapports avec les différentes dimensions impliquées dans le concept « qualité de vie ». Présenter une méthodologie pour l'analyse de risque : formes de risque (physiques, personnels, sociaux), méthodes d'évaluation de choix technologiques et de détermination de la viabilité sociale de ces technologies. Proposer et discuter des modèles de prises de décision dans l'allocation de ressources technologiques et l'implantation de technologies nouvelles (avec applications particulières à l'informatique, la robotique, etc.). Identifier les principes fondamentaux devant être respectés dans l'implantation de ces technologies. Circonscrire la fonction nouvelle et la responsabilité sociales de l'ingénieur. Règlement pédagogique particulier : Pour s'inscrire à ce cours, l'étudiant en informatique doit avoir réussi 60 crédits du programme. Pour s'inscrire à ce cours, l'étudiant inscrit au double baccalauréat en mathématiques et en informatique ou au double baccalauréat en physique et en informatique doit avoir complété 90 crédits dans le programme.
Cours optionnels (21 crédits)
L’étudiant doit suivre les cours suivants (12 crédits) : CSE1001 Introduction à la cybersécurité (INF1001; INF1004) Ce cours permettra à l’étudiant de prendre conscience des problématiques et des enjeux critiques en cybersécurité. L’étudiant pourra se familiariser avec les concepts de base et acquérir les connaissances essentielles dans divers domaines d’expertise de la cybersécurité. Il aura l’occasion d’explorer les différentes techniques permettant de sécuriser les données. Ce cours aborde principalement les volets suivants: Enjeux, Modèles de sécurité, Triade CIA, Identification des actifs informationnels et analyse de risque, Cybermenaces et mécanismes de cyberdéfense, Étude des vulnérabilités, exploitation et contre-mesures, Hachage, Cryptosystèmes, Protocoles cryptographiques, Spécification des politiques de sécurité, Modèles de contrôle d’accès, Authentification.CSE1002 Sécurité des logiciels (CSE1001; INF1007) Ce cours présente les principaux aspects de la sécurité applicative. Il sera question d’étudier et de détecter les diverses failles ciblant les composantes logicielles et de comprendre les exploits associés. L’objectif est d’estimer la gravité des menaces potentielles et d’envisager les contre-mesures adéquates afin de réduire la surface d’exposition aux attaques. L’intégration de la sécurité des logiciels sera également réalisée d’une manière intrinsèque dès la phase de conception (Security By Design). Ce cours aborde principalement les volets suivants: Vulnérabilités et menaces, Sécurité des applications web, Maliciels, Intégration de la sécurité dans le cycle de vie logiciel, Codage sécurisé.
CSE1003 Sécurité des réseaux (CSE1001; INF1010) Ce cours permettra à l’étudiant de comprendre les problèmes de sécurité qui menacent les réseaux. L’étudiant aura l’occasion de découvrir les vulnérabilités ainsi que les attaques qui ciblent les protocoles de communication. Afin de proposer une stratégie sécurisant les infrastructures réseaux, il sera question d’étudier une panoplie de contre-mesures et de mécanismes de sécurité. Ce cours aborde principalement les volets suivants: Fondements des réseaux, Vulnérabilités et cybermenaces, Normes de sécurité des réseaux, Spécification des politiques de sécurité, Mécanismes de défense, Contrôle d’accès, Analyse de paquets, Prévention des intrusions, Détection des intrusions, Gestion des évènements.
INF1043 Sujets spéciaux DUAL Ce cours a pour objectif d'ajouter au programme des activités revêtant un intérêt actuel en développement de logiciel, en développement d’applications mobiles, en science des données ou en cybersécurité et infonuagique et qui ne sont pas nécessairement vues ou approfondies dans le programme. Ce cours s'adresse aux étudiants de l’option DUAL du programme de baccalauréat en informatique. Il s'agit de faire de la formation de contenu au sein de l'entreprise qui accueille l'étudiant dans le cadre de l'entente DUAL. Elle est aussi encadrée par un professeur du programme.
L’étudiant doit suivre trois ou quatre cours (9 ou 12 crédits) parmi les cours d’informatique suivants: INF1011 Génie logiciel (INF1007) Familiariser l'étudiant avec les concepts et principes fondamentaux du génie logiciel et le sensibiliser à leur importance dans la production de logiciels de qualité. Amener l'étudiant à une compréhension des principes de base de l'assurance qualité. Principes et concepts fondamentaux du Génie Logiciel. Produit logiciel: caractéristiques. Processus de génie logiciel. Modèles de cycle de vie. Prototypage. Normes. Maturité des processus. Processus léger. Méthodes Agiles. Réutilisation de logiciel. Concepts favorisant la réutilisation - Pattern, COO, paradigme aspect. Entités réutilisable - lignes de produits logiciels, composants, produits COTS. Assurance qualité logiciel : Principes et Techniques. Processus de validation et de vérification : définition, rôles, techniques, impact sur la qualité, etc. Processus de test : techniques et stratégies. Planification, conception et réalisation des tests. Techniques de revues, Preuves, etc. Concepts et principes de la qualité. Contrôle de la qualité : qualité et métriques. Gestion de projets. Maintenance. Réingénierie. Documentation technique.
INF1013 Environnement de développement et composantes logicielles (INF1005 ou INF1035; SIF1015) Compléter la formation des étudiants en lien avec les méthodologies et technologies de développement des applications Frame/Web d'envergure. Apprendre à construire des composants réutilisables en s'appuyant sur des bibliothèques existantes. Réaliser les applications Web et Frame selon les modèles MVC/MVP ainsi que des Application Serveur sous forme d'APE RESTFUL. Utiliser et configurer des environnements de développement pour de grands projets logiciels. Maîtriser les gestionnaires de dépendances de projets. Open Source/Propriétaires. Quelques-unes des technologies importantes seront utilisées : C# - ASP.Net, Java-JSP, Python-DJANGO, Ruby-Rails, GWT, ANGULAR, REACT, Maven, Gradle, etc.
INF1018 Analyse de programmes (INF1035) Présenter à l'étudiant les principes et les techniques de base de l'implantation des langages de programmation. L'initier à l'évaluation des langages de programmation et à l'analyse de programmes. Familiariser l'étudiant avec certains outils de description et d'analyse des langages de programmation. Étude des langages de programmation dans l'optique de construction d'outils d'environnement de programmation. Concepts fondamentaux des langages de programmation modernes. Classification et évaluation des langages de programmation. Concepts et critères de qualité. Syntaxe et sémantique des langages de programmation. Méthodes de description formelles. Grammaire et Langages. Méthodes d'analyse lexicale et syntaxique : principes, approches et applications. Outils pour le traitement des langages. Analyse sémantique. Introduction à la génération et à l'optimisation de code. Éléments d'analyse de programmes en langages évolués : statique, dynamique, dépendances, etc.
INF1020 Commerce électronique Ce cours a comme objectif principal l'initiation aux concepts de base des affaires et du commerce électronique et leur mise en pratique dans la réalisation d'un projet de commerce électronique. Le cours a aussi comme objectifs secondaires : d'apprendre à gérer un projet d'équipe en informatique. Aperçu du commerce électronique; la "digitalisation" des affaires; les processus et stratégies B2B (business-to-business); le rôle des intermédiaires indépendants (third parties); l'environnement régulateur; EDI, e-commerce et Internet; risques des systèmes non-sécuritaires; risques de gestion; normes, protocoles et langages Internet; cryptographie et authentification; murs coupe-feu (firewalls); mécanismes de paiement en ligne pour le e-commerce; agents intelligents; le marketing sur le Web; autres sujets d'actualité en affaires et en commerce électronique. Règlement pédagogique particulier : Pour s'inscrire au cours INF1020 Commerce électronique, les étudiants inscrits au cheminement DEC-BAC (7533) doivent avoir réussi les cours obligatoires de la première session. Les étudiants inscrits au double baccalauréat : mathématiques et informatique (6833) ou inscrits au double baccalauréat en physique et en informatique (6925) doivent avoir réussi les cours obligatoires des cinq (5) premières sessions.
INF1030 Introduction au développement d'applications mobiles (version Android) (INF1005 ou INF1035) Dans ce cours, l'étudiant sera amené à comprendre le cycle de développement d'applications mobiles. Utilisant le langage Java, les étudiants pourront créer des programmes tant standalone que déployés sur des plateformes mobiles. L'emphase sera mise sur les apprentissages des meilleurs pratiques de développement d'application mobiles et ce dans le but de faciliter et d'augmenter l'efficacité de ce développement. Les étudiants pourront aussi comprendre le fonctionnement de la machine virtuelle Dalvik comme plateforme pour le développement d'applications Android.
SDD1001 Introduction à la science des données Ce cours aborde les langages modernes utilisés en sciences des données comme Python, les bibliothèques de statistiques, de calcul symbolique ainsi que leurs applications. Les langages seront abordés dans les paradigmes orientés objets et fonctionnels.
L’étudiant peut suivre un cours (0 ou 3 crédits) parmi les cours d’informatique des cheminements (01), (02) et (03) suivants : INF1012 Élaboration et gestion de projets scientifiques (INF1011) Identifier et analyser les conséquences de l'innovation technologique et de la recherche et développement en sciences. Acquérir des connaissances et des techniques de travail en situation de projets informatiques. Développer l'aptitude à planifier de tels projets, à y participer et, éventuellement, à les gérer. Développer l'habileté à gérer son temps et celui de ses collaborateurs. Se familiariser à la dimension internationale de la gestion des projets. Les différentes formes d'innovation technologique. Évaluation des impacts positifs et négatifs de l'innovation technologique et de la recherche et développement en sciences : étude coût/bénéfice, impact sur les individus, la communauté scientifique et la société. Gestion de projets informatiques : identification des objectifs et définition du projet, élaboration de solutions à caractère scientifique, planification des activités, échéanciers; choix de l'équipe, attribution des responsabilités; importance de la coordination en environnement de projet; suivi des activités et gestion du temps; progiciels de gestion de projets.
INF1021 Les architectures réparties (INF1009) Ce cours permet d'acquérir des connaissances sur les systèmes répartis. Il permet aux étudiants de s'initier aux méthodes de conception et de réalisation des applications informatiques réparties. À la fin du cours, les étudiants seront capables de comparer plusieurs méthodes de réalisation de systèmes répartis. Utilisation des SOCKETS : rappel sur le protocole TCP; interface Java de manipulation des sockets (Java.net); réalisation d'applications clients serveurs. Utilisation de Java RMI : introduction à RMI (Remote Method Invocation); implémentation des objets, côté client et côté serveur. Introduction à CORBA : évolution vers les applications distribuées; protocole RPC (Remote Procedure Calls); norme CORBA; implémentation du client et de l'objet distribué CORBA. Agents intelligents : concept d'agent; agents coopératifs, rationnels, adaptatifs, mobiles; agents informationnels intelligents; agents pour le Web; sécurité, mobilité, aspects algorithmiques. XML (eXtensible Markup Language) : SGML, HTML, XML et le Web; EDI et XML pour les applications d'affaires électroniques; définitions de nouveaux langages basés sur XML; technologies et applications XML; protocoles de communication basés sur le XML.
INF1031 Développement d'applications mobiles avancées (version Android) (INF1030) A partir de notions acquises dans le cours Introduction au développement d'applications mobiles (INF1030), ce cours permet aux étudiants de développer leurs compétences en développement d'applications mobiles avancées et ce dans des domaines divers comme les sciences, le commerce, la santé, le divertissement, etc. De plus, les étudiants seront amenés à mieux comprendre le développement d'applications verticales impliquant des notions d'architecture multi-tiers, de connectivité réseau. De sécurité, etc.
PRO1027 Programmation scientifique en C (INF1002 ou PRO1026) Approfondir les concepts fondamentaux de la conception et de la production de logiciel. Développer l'habileté à réaliser des logiciels de qualité. Réaliser des applications pratiques dans le domaine des méthodes numériques. Étude des langages C et C++. Qualité des programmes : clarté, lisibilité, modifiabilité, efficacité, facilité d'usage, robustesse. Programmation modulaire. Programmation en langage C ou C++. A titre indicatif, les applications sont choisies parmi les suivantes : statistiques, manipulation de matrices, résolution de systèmes d'équations linéaires, interpolation, approximation, dérivation et intégration numériques.
SDD1002 Modélisation et simulation (STT1001; PIF1005) Ce cours aborde les différentes techniques théoriques et pratiques de simulation, de modélisation, et de visualisation, des données. L'étudiant sera amené à explorer plusieurs outils utilisés dans les sciences des données. Ce cours aborde aussi les notions liées à la généralisation: sous-ajustement, sur-ajustement, validation croisée. Approches: classification, régression, agrégation (clustering). Principaux éléments: Outils de simulation, de visualisation et manipulation de données comme Python ou R ou Orange, ou Tableau, autre.
SIF1033 Traitement d'image (INF1004; STT1001 ou STT1042) Amener l'étudiant à pouvoir utiliser l'ordinateur pour traiter une image de façon à en améliorer la perception visuelle et à permettre la détection d'objets significatifs. Présentation des notions de base du traitement de l'image : correction géométrique et radiométrique des images, amélioration du contraste, amélioration des images par filtrage spatial isotropique et anisotropique, spectral et morphologique; segmentation des images par seuillage; détection des arêtes et des contours, détection des droites et des formes circulaires, détection des objets par corrélation spatiale; génération d'images tomographiques; applications Client/Serveur permettant le traitement d'image à distance; protocoles de transfert d'images. Les étudiants expérimentent les concepts du traitement des images par des projets pratiques codés en langage C ou en langage C++.
Cours complémentaires (9 crédits)
L'étudiant doit suivre les trois cours complémentaires (9 crédits) suivants : INF1040 DUAL I en informatique, INF1041 DUAL II en informatique et INF1042 DUAL III en informatique.