15 Diagramme de Classes
Baptiste DUDONNE edited this page 1 year ago

Diagramme de Classes

@startuml
' Définition des styles
skinparam classAttributeIconSize 0
skinparam classBackgroundColor #ffffb9
skinparam classBorderColor #800000
skinparam classArrowColor #800000
skinparam classFontColor #black
skinparam classFontName Tahoma
skinparam linetype ortho

package Model {
    enum Role {
        UTILISATEUR
        MODERATEUR
        ADMINISTRATEUR
    }

    class Utilisateur {
        - id : int
        - email : string
        - motDePasse : string
        - role : Role
        + getEmail() : string
        + getMotDePasse() : string
        + getRole() : Role
    }

    class Alumni {
        - utilisateur : Utilisateur
        - profil : Profil
        + getUtilisateur() : Utilisateur
        + getProfil() : Profil
        + getCollections() : InterfaceCollection
    }

    class Profil {
        - id : int
        - nom : string
        - prenom : string
        - linkedinURL : string
        - portfolioURL : string
        - githubURL : string
        - photoProfil : string
        + getId() : int
        + getPhoto() : string
        + getCV() : CV
        + getNom() : string
        + getPrenom() : string
        + getLinkedinURL() : string
        + getPortfolioURL() : string
        + getGithubURL() : string
    }

    class CV {
        + getExperience() : List<Experience>
        + addExperience(e: Experience)
        + suppExp(e: Experience)
        + updateExp(e: Experience)
    }

    class Cursus {
        + getFormation() : List<Formation>
        + addFormation(f: Formation)
        + supFormation(f: Formation)
        + updateFormation(f: Formation)
    }

    class Formation {
        + nom : string
        + ville : string
        + formationActuel : bool
        + dateFin : date
        + dateDebut : date
    }

    class Article {
        + titre : string
        + description : string
    }

    class Experience {
        - id : int
        - intitule : string
        - dateDebut : Date
        - dateFin : Date
        + getId() : int
        + getIntitule() : string
        + getDateDebut() : Date
        + getDateFin() : Date
    }

    enum TypeContrat {
        INDIFFERENT
        CDI
        CDD
        ALTERNANCE
        STAGE
    }

    enum NiveauEtudes {
        INDIFFERENT
        BAC_PLUS_2
        BAC_PLUS_3
        BAC_PLUS_5
    }

    enum Exp {
        JUNIOR
        SENIOR
    }

    class Offre {
        - id : int
        - nom : string
        - amorce : string
        - description : string
        - profilRecherche : string
        - entreprise : string
        - typeContrat : TypeContrat
        - numero : int
        - siteWeb : string
        - mailContact : string
        - img : string
        - logo : string
        - date : Date
        - offreur : Alumni
        - remote : bool
        ' Méthodes de Offre
    }

    interface InterfaceCollection {
        + getItems() : List<Object>
    }

    class OffreTheque implements InterfaceCollection {
        + getOffre(id: int) : Offre
        + getAllOffres() : List<Offre>
        + suppOffre(id: int) : bool
    }

    class Evenement {
        - id : int
        - nom : string
        - description : string
        - nbParticipantsMax : int
        - organisateur : Alumni
        - date : Date
        - img : string
        ' Méthodes de Evenement
    }

    class EvenementTheque implements InterfaceCollection {
        + getEvenements() : List<Evenement>
        + addEvenement(e: Evenement)
        + suppEvenement(e: Evenement)
    }

    class MembresSite {
        + getAlumni() : List<Alumni>
        + addAlumni(a: Alumni)
        + suppAlumni(a: Alumni)
        + updateAlumni(a: Alumni)
    }

    class UserManager {
        + getAlumni() : List<Alumni>
        + connexion(email: string, motDePasse: string) : Alumni
    }

    class APropos implements InterfaceCollection{
        + getArticle() : List<Article>
        + addArticle(a: Article)
        + updateArticle(a: Article)
        + supArticle(a: Article) 
    }

    ' Relations
    Utilisateur *-- Role : - role
    Alumni *-- Utilisateur : - utilisateur
    Alumni *-- Profil : - profil
    Profil *-- CV : - cv
    CV *-- Experience : - experiences
    Cursus *-- Formation : - formations
    Profil --> Cursus : - cursus
    Offre --> Exp : - experience
    Offre --> NiveauEtudes : - niveauEtudes
    Offre --> TypeContrat : - typeContrat
    OffreTheque --> Offre : - offres 
    APropos --> Article : - articles
    EvenementTheque --> Evenement : - evenements
    MembresSite --> Alumni : - alumnis
    UserManager --> MembresSite
    Alumni --> InterfaceCollection : - collections
}

package DAL {
    abstract class Gateway {
        +create(obj: Object): int
        +read(id: int): Object
        +update(obj: Object): bool
        +delete(id: int): bool
    }

    class AlumniGateway {
        +readByEmail(email: string): Alumni
    }

    class ProfilGateway {
        +readByAlumniId(alumniId: int): Profil
    }

    class OffreGateway {
        +readAll(): List<Offre>
    }

    class EvenementGateway {
        +readUpcoming(): List<Evenement>
    }

    class ArticleGateway {
        +readRecent(): List<Article>
    }

    class ExperienceGateway {
        +readByCVId(cvId: int): List<Experience>
    }

    class FormationGateway {
        +readByCursusId(cursusId: int): List<Formation>
    }

    class Connection {
        -dsn: string
        -username: string
        -password: string
        +executeQuery(query: string, *params: string)
        +getResults(): *string
    }

    class PDO
    Connection --|> PDO

  
    Gateway -up-|> AlumniGateway
    Gateway -up-|> ProfilGateway
    Gateway -down-|> OffreGateway
    Gateway -down-|> EvenementGateway
    Gateway -left-|> ArticleGateway
    Gateway -right-|> ExperienceGateway
    Gateway -right-|> FormationGateway

    Gateway *-- Connection : - conn
}

package Controlleur {
    ' Le package Controlleur utilise les packages Gateway et Model
    ' Nous n'avons pas spécifié les détails des classes à l'intérieur du package  pour un gain de place

' Relations entre le package Controlleur et les autres packages
Controlleur ..> DAL : utilise
Controlleur ..> Model : utilise

}

package Fabrique
{

	interface Factory
    {
    	+ create() : InterfaceCollection 
    }
    
   	class FactoryOffreTheque
    {
    	+ create() : OffreTheque
    }
    
    
   	class FactoryEvenementTheque
    {
    	+ create() : EvenementTheque
    }
    
    
   	class FactoryAPropos
    {
    	+ create() : APropos
    }
    
    FactoryOffreTheque ..|> Factory
    FactoryEvenementTheque ..|> Factory
    FactoryAPropos ..|> Factory
   
}

DAL ..> Fabrique : utilise
Model ..> Fabrique : utilise






@enduml
Table of Contents