DÉVELOPPEMENT DE LOGICIELS D’ENTREPRISE III · 2020-04-03 · PLAN Présentation Plans de cours...
Transcript of DÉVELOPPEMENT DE LOGICIELS D’ENTREPRISE III · 2020-04-03 · PLAN Présentation Plans de cours...
DÉVELOPPEMENT DE LOGICIELS D’ENTREPRISE IIICOURS 01
PLAN▸ Présentation
▸ Plans de cours et méthodologie
▸ Récapitulatif Git
▸ Récapitulatif iOS
▸ Personnalisations UI sur iOS
▸ Travail! !
Présentation
PRÉSENTATION▸ James Hoffman 💻 📚 🏃 🎮 🏍 🏕 👷
▸ MIO ou [email protected]
▸ Bureau: 1131A
▸ Ressources du cours: https://jh.shawinigan.info
▸ À votre tour! ) 🤝 +
▸ Votre nom
▸ Vos loisirs, hobbies ou passions
Plans de cours et méthodologie
PLANS DE COURS - DEV▸ 420-A7C-SW
▸ https://cshaw.jhoffman.ca/sessions/2019H/INT/420-A7C-SW.pdf
▸ Pondération 2 - 4 - 3 sur 8 semaines devient
‣ Concevoir, développer, déployer et gérer une application à partir d’un devis de projet à l’aide des outils de développement graphique
4h Théorie 8h Lab/Pratique 6h À la maison
ÉVALUATIONS - DEV
PLANS DE COURS - BD▸ 420-B75-SW
▸ https://cshaw.jhoffman.ca/sessions/2019H/INT/420-B75-SW.pdf
▸ Pondération 2 - 2 - 3 sur 8 semaines devient
‣ Concevoir, développer et mettre en œuvre une base de données complète à partir d’un devis de projet et des contraintes technologiques imposées.
4h Théorie 4h Lab/Pratique 6h À la maison
ÉVALUATIONS - BD
VARIA▸ Tout retard à la remise d’un travail entraîne une pénalité de 25% par jour de
retard à partir de la date de remise.
▸ Aucun retard autorisé pour les livraisons et suivis.
▸ Les présences seront prises au début de chaque cours.
▸ Vous êtes responsable de votre réussite, je suis là pour vous guider et vous aider dans votre apprentissage.
▸ Matériel requis
▸ Écouteurs
MÉTHODOLOGIE▸ 2 semaines d’exploration des technologies à partir d’une application existante
▸ Démonstration, puis vous faites l’implémentation dans Recipeasy
▸ Processus de développement Agile et itératif à partir d’un devis client
http://agilemanifesto.org/
Récapitulatif Git
GIT - INTERACTIONS
GIT - BRANCHES
GIT - USAGE▸ Commits fréquents, petite unité fonctionnelle
▸ Ne JAMAIS commit du code incomplet/non-fonctionnel
▸ Pull régulièrement
▸ Push régulièrement
▸ Gérer les conflits localement: Commit, Pull, Push
▸ Utiliser les branches abondamment: feature-x, test-y
▸ https://www.git-tower.com/learn/git/ebook/en/command-line/appendix/best-practices
▸ Usage collaboratifhttps://www.atlassian.com/git/tutorials/comparing-workflows
EXERCICE▸ https://learngitbranching.js.org/
▸ https://www.katacoda.com/courses/git
▸ Scénarios 1 à 7
LECTURES▸ https://guides.github.com/introduction/git-handbook/
▸ https://www.atlassian.com/git/tutorials/what-is-version-control ▸ https://www.git-tower.com/learn/git/ebook/en/command-line/basics/what-is-version-
control#start ▸ https://www.atlassian.com/git/tutorials
▸ Ligne de commandehttp://gitref.org/ https://git-scm.com/docs/gittutorial
▸ BitBuckethttps://www.atlassian.com/git/tutorials/learn-git-with-bitbucket-cloud
▸ Documentationhttps://git-scm.com/doc
Récapitulatif iOS
RÉCAPITULATIF IOS▸ https://cshaw.jhoffman.ca/2018A/B7B/
▸ Documentationhttps://developer.apple.com https://developer.apple.com/documentation/
▸ Langage Swift avec Xcodehttps://docs.swift.org/swift-book/LanguageGuide/TheBasics.html
▸ Swift est un langage moderne offrant plusieurs fonctionnalités et paradigmes intéressants
▸ Orienté-objet, fonctionnel
▸ Classes, struct, enums, protocols
▸ Types collection flexibles: Array, Set, Dictionary
▸ Inférence de String: “Hello \(username)”
VAR VS. LET▸ var
permet de créer une variable, donc sa valeur pourra être modifiée par la suite
▸ letpermet de créer un constante, sa valeur ne pourra être modifiée par la suite
▸ identificateur nomVariable: Type = ValeurInitialevar age: Int = 23 let KEY: String = “my_constant_key”
OPTIONALS… ?▸ Ajoute une information supplémentaire concernant le type de données de la
variable
▸ On l’utilise dans un contexte où l’absence de valeur est possible, ?
▸ L’optionalité indique 2 états possibles :
▸ Il n’y a aucune valeur, nil
▸ Il y a une valeur accessible, elle peut être récupérée, unwrap !
OPTIONALS▸ Exemple 1
▸ var errorMessage: String? = nillet s1: String = errorMessage //invalidelet s2: String? = errorMessage //OKerrorMessage = “invalid password”let s3: String = errorMessage! //OK let s4: String? = errorMessage! //OK errorMessage = nil let s3: String = errorMessage! //plante car errorMessage = nil, on ne peut unwrap (!)let s4: String? = errorMessage! //plante car errorMessage = nil, on ne peut unwrap (!)
OPTIONALS▸ Exemple 2
▸ var errorMessage: String? = nil if let message = errorMessage { //message != nil} else { //message == nil}
OPTIONALS▸ Exemple 3
▸ var errorMessage: String? = “invalid password”if let message = errorMessage { //message != nil //message est de type String, non-optionel, il a été unwrap} else { //message == nil}
▸ L’équivalent est: if (errorMessage != nil) { message = errorMessage! //message est de type String, non-optionel}
OPTIONALS▸ Exemple 4
OPTIONALS▸ Exemple 5
FONCTIONS ET OPTIONALS
FONCTIONS ENCAPSULÉES - CLOSURES▸ Un closure est une fonction qui est stockée dans une variable
▸ Elle peut être utilisée et passée en paramètre comme n’importe quelle variable
▸ Elle a l’avantage de capturer(se souvenir, connaître) le contexte où elle est déclarée
CLOSURES - EXEMPLE
CLOSURES - EXEMPLE 2
PROTOCOLES▸ Les protocoles définissent un contrat au niveau du comportement (méthodes)
et des données (propriétés) qu’un élément (classe, struct ou enum) peut adopter, donc on dit qu’il se conforme au protocole.On peut se conformer à plusieurs protocoles.
▸ Un protocole en Swift offre la flexibilité combinée des classes abstraites ET des interfaces traditionnelles existant en Java, par exemple.
▸ On adopte un protocole avec l’opérateur : en spécifiant la super classe avant les protocoles auxquels on se conforme
PROTOCOLES - PROPRIÉTÉS▸ Un protocol peut spécifier des propriétés qui devront être déclarés par
l’élément qui l’adopte. On déclare les propriétés avec la même syntaxe que pour les classes.
▸ On peut spécifier si la propriété doit être au minimum disponible en lecture seule ou en lecture-écriture
PROTOCOLES - MÉTHODES▸ Le principe est le même au niveau des méthodes. On déclare les méthodes
dans le protocole en respectant la syntaxe vue précédemment (en omettant les { } ) et les éléments qui s’y conforme devront les implémenter.
PROTOCOLES - HÉRITAGE▸ Un protocole peut hériter d’un ou plusieurs autres protocoles
▸ L’élément qui s’y conformera devra donc respecter l’ensemble des indications de la hiérarchie de protocoles
DÉLÉGATION
DÉLÉGATION, EXEMPLE : TABLEVIEWS
didSelectRowAtIndexPath
DÉLÉGATION, EXEMPLE : TABLEVIEWS
URLSESSION▸ Coordonne les interactions les tâches de transfert de données sur le réseau
▸ DataTask
▸ En arrière-planDownloadTaskUploadTask
▸ https://developer.apple.com/documentation/foundation/urlsession
▸ *Attention* Les versions récentes d’iOS privilégient HTTPS Les requêtes HTTP sont bloquées, il faut ajouter une exception dans le plist si on veut utiliser une ressource HTTP non-protégée https://stackoverflow.com/questions/32631184/the-resource-could-not-be-loaded-because-the-app-transport-security-policy-requi/32631185#32631185
URLSESSION - EXEMPLE
▸ https://cocoacasts.com/networking-in-swift-meet-the-urlsession-family
TRAITEMENT ASYNCHRONE
TRAITEMENT ASYNCHRONE
URLSESSION - TRAITEMENT ASYNCHRONE
▸ Pour offrir un traitement asynchrone, on exploite le mécanisme de threads
▸ *Toutefois*, toute interaction avec les objets du UI doit être effectuée sur le thread principal
TECHNOLOGIE IOSiOS
InteractionsUIKit, Événements tactiles
Multimédia Traitement images, Audio, Vidéo, Animations, 2D, 3D
Expose les fonctionnalités du systèmeRéseau, Fichiers, SQLite, Threads, GPS
Noyau UnixFonctionnalités primaire du système d’exploitation Sécurité, Alimentation, Sockets
ARCHITECTURE IOS - MVC▸ Model-View-Controller
▸ UIApplication: Gère l’application
▸ App Delegate: Point de contact d’iOS avec notre application
▸ View Controller: Défini le comportement de l’application,reçoit les événements
▸ View: Défini les éléments visuels etanimations
▸ Model: Données, persistance et règles du domaine
https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html
ARCHITECTURE IOS - MVC
https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html
Objets du domaine: .swift
Sous-classes de UIViewController: .swift
UIView et sous-classes, en code ou WYSIWYG;code: .swiftvisuel: .storyboard, .xib
RECIPEASY▸ Recipeasy est une application permettant de sauvegarder des recettes
https://www.youtube.com/watch?v=Iz6Hn6v9MAU&t=0s&index=6&list=PL7dWCSr88NFQXyccOSKyqCFIiDhk1loQV
▸ Projet de départ: https://cshaw.jhoffman.ca/sessions/2019H/INT/C01/Recipeasy.zip
MARTHA▸ http://martha.jh.shawinigan.info, prenom:admission
Doc: https://dev.mysql.com/doc/refman/5.6/en/examples.html
▸ Offre une couche d’abstraction entre la base de données et l’application client qui manipule les données.
▸ Une interface web permets de gérer la base de données et les requêtes à exécuter, qui seront accessibles via des requêtes HTTP.
▸ Démo: https://youtu.be/splltGV96bY
MARTHA
DATABASE
INTERNET
REQUÊTE HTTP → ←RÉPONSE JSON
MARTHA - API▸ https://www.base64encode.org/
JSON▸ Format de données open-source facilitant le
transfert d’information
▸ Facile à comprendre pour les humains,
▸ Rapide à manipuler par les machines
▸ Représente des objets sous forme clé-valeur, supporte également les tableaux
▸ Les clés sont de type string, les valeurs de typestring, nombre, booléen, objet, tableau, null
RESSOURCES IOS▸ Apple - Introduction à iOS
▸ https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/BuildABasicUI.html#//apple_ref/doc/uid/TP40015214-CH5-SW1
▸ Stanford - CS193P
▸ https://itunes.apple.com/ca/course/developing-ios-11-apps-with-swift/id1309275316
▸ https://www.youtube.com/watch?v=TZL5AmwuwlA&list=PL3d_SFOiG7_8ofjyKzX6Nl1wZehbdiZC_
▸ https://www.raywenderlich.com/ios
▸ https://www.appcoda.com/ios-programming-course/
▸ https://nshipster.com/
Personnalisations UI sur iOS
ICÔNE D’APPLICATION▸ https://developer.apple.com/design/human-interface-guidelines/ios/icons-
and-images/app-icon/
▸ https://appiconmaker.co
LAUNCH SCREEN▸ https://developer.apple.com/design/human-interface-guidelines/ios/icons-
and-images/launch-screen/
THÈME VISUEL▸ https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/
branding/
▸ https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/color/
▸ https://developer.apple.com/design/human-interface-guidelines/ios/controls/buttons/
▸ https://developer.apple.com/design/tips/
LOCALISATION▸ https://www.raywenderlich.com/250-internationalizing-your-ios-app-getting-
started
▸ https://developer.apple.com/internationalization/
▸ https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/LocalizingYourApp/LocalizingYourApp.html
Travail
TRAVAIL À FAIRE▸ Créer un répertoire Git individuel pour réaliser votre projet
▸ Migrer le projet de départ vers votre compte Martha personnel
▸ Modifier Recipeasy 1.0 pour inclure les éléments suivants:
▸ Icône d’application
▸ Launch Screen
▸ Personnalisation du style/thème visuel
▸ Localisation bilingue anglais/français
▸ Concentrez vos effort sur les écrans Login et Sign Up