diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4b50bf0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +plantuml.png \ No newline at end of file diff --git a/DIAGRAME_DE_CLASSE.mdj b/DIAGRAME_DE_CLASSE.mdj new file mode 100644 index 0000000..86182e0 --- /dev/null +++ b/DIAGRAME_DE_CLASSE.mdj @@ -0,0 +1,1046 @@ +{ + "_type": "Project", + "_id": "AAAAAAFF+h6SjaM2Hec=", + "name": "Untitled", + "ownedElements": [ + { + "_type": "UMLModel", + "_id": "AAAAAAFF+qBWK6M3Z8Y=", + "_parent": { + "$ref": "AAAAAAFF+h6SjaM2Hec=" + }, + "name": "Model", + "ownedElements": [ + { + "_type": "UMLClassDiagram", + "_id": "AAAAAAFF+qBtyKM79qY=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Main", + "defaultDiagram": true, + "ownedViews": [ + { + "_type": "UMLClassView", + "_id": "AAAAAAGbFRd1rBAqXv8=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGbFRd1qxAoJLU=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGbFRd1rRArXmM=", + "_parent": { + "$ref": "AAAAAAGbFRd1rBAqXv8=" + }, + "model": { + "$ref": "AAAAAAGbFRd1qxAoJLU=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGbFRd1rRAshiU=", + "_parent": { + "$ref": "AAAAAAGbFRd1rRArXmM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -192, + "top": -416, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGbFRd1rRAtN84=", + "_parent": { + "$ref": "AAAAAAGbFRd1rRArXmM=" + }, + "font": "Arial;13;1", + "left": 117, + "top": 79, + "width": 85.17626953125, + "height": 13, + "text": "Pixel" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGbFRd1rRAu6jI=", + "_parent": { + "$ref": "AAAAAAGbFRd1rRArXmM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -192, + "top": -416, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGbFRd1rRAvoJE=", + "_parent": { + "$ref": "AAAAAAGbFRd1rRArXmM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -192, + "top": -416, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 112, + "top": 72, + "width": 95.17626953125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGbFRd1rRAshiU=" + }, + "nameLabel": { + "$ref": "AAAAAAGbFRd1rRAtN84=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGbFRd1rRAu6jI=" + }, + "propertyLabel": { + "$ref": "AAAAAAGbFRd1rRAvoJE=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGbFRd1rRAwS7Y=", + "_parent": { + "$ref": "AAAAAAGbFRd1rBAqXv8=" + }, + "model": { + "$ref": "AAAAAAGbFRd1qxAoJLU=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGbFRe78hBV2f4=", + "_parent": { + "$ref": "AAAAAAGbFRd1rRAwS7Y=" + }, + "model": { + "$ref": "AAAAAAGbFRe75hBSfjk=" + }, + "font": "Arial;13;0", + "left": 117, + "top": 102, + "width": 85.17626953125, + "height": 13, + "text": "-r: int", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGbFRf+YhBbsj0=", + "_parent": { + "$ref": "AAAAAAGbFRd1rRAwS7Y=" + }, + "model": { + "$ref": "AAAAAAGbFRf+WBBYjHk=" + }, + "font": "Arial;13;0", + "left": 117, + "top": 117, + "width": 85.17626953125, + "height": 13, + "text": "-g: int", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGbFRgNaxBhOCY=", + "_parent": { + "$ref": "AAAAAAGbFRd1rRAwS7Y=" + }, + "model": { + "$ref": "AAAAAAGbFRgNXxBe9YA=" + }, + "font": "Arial;13;0", + "left": 117, + "top": 132, + "width": 85.17626953125, + "height": 13, + "text": "-b: int", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGbFRl8hhBufVY=", + "_parent": { + "$ref": "AAAAAAGbFRd1rRAwS7Y=" + }, + "model": { + "$ref": "AAAAAAGbFRl8ehBrIG0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 21, + "top": -61, + "width": 64.2353515625, + "height": 13, + "text": "+Port1", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGbFRmd+xB1Qw4=", + "_parent": { + "$ref": "AAAAAAGbFRd1rRAwS7Y=" + }, + "model": { + "$ref": "AAAAAAGbFRmd8RBycuE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 21, + "top": -61, + "width": 64.2353515625, + "height": 13, + "text": "+Attribute1", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 112, + "top": 97, + "width": 95.17626953125, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGbFRd1rRAxujs=", + "_parent": { + "$ref": "AAAAAAGbFRd1rBAqXv8=" + }, + "model": { + "$ref": "AAAAAAGbFRd1qxAoJLU=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGbFRm0oxB8XSE=", + "_parent": { + "$ref": "AAAAAAGbFRd1rRAxujs=" + }, + "model": { + "$ref": "AAAAAAGbFRm0mhB5BV0=" + }, + "font": "Arial;13;0", + "left": 117, + "top": 155, + "width": 85.17626953125, + "height": 13, + "text": "+getterSetter()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 112, + "top": 150, + "width": 95.17626953125, + "height": 23 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGbFRd1rRAyRwU=", + "_parent": { + "$ref": "AAAAAAGbFRd1rBAqXv8=" + }, + "model": { + "$ref": "AAAAAAGbFRd1qxAoJLU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -96, + "top": -208, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGbFRd1rRAzoM0=", + "_parent": { + "$ref": "AAAAAAGbFRd1rBAqXv8=" + }, + "model": { + "$ref": "AAAAAAGbFRd1qxAoJLU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -96, + "top": -208, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 112, + "top": 72, + "width": 94.17626953125, + "height": 103, + "nameCompartment": { + "$ref": "AAAAAAGbFRd1rRArXmM=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGbFRd1rRAwS7Y=" + }, + "operationCompartment": { + "$ref": "AAAAAAGbFRd1rRAxujs=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGbFRd1rRAyRwU=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGbFRd1rRAzoM0=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGbFRozqBCEWV0=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGbFRozpxCCny8=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGbFRozqBCF29M=", + "_parent": { + "$ref": "AAAAAAGbFRozqBCEWV0=" + }, + "model": { + "$ref": "AAAAAAGbFRozpxCCny8=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGbFRozqBCG6fc=", + "_parent": { + "$ref": "AAAAAAGbFRozqBCF29M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -176, + "top": -16, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGbFRozqBCHSDU=", + "_parent": { + "$ref": "AAAAAAGbFRozqBCF29M=" + }, + "font": "Arial;13;1", + "left": 357, + "top": 95, + "width": 127.55322265625, + "height": 13, + "text": "RGBImage" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGbFRozqBCIG8w=", + "_parent": { + "$ref": "AAAAAAGbFRozqBCF29M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -176, + "top": -16, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGbFRozqBCJk78=", + "_parent": { + "$ref": "AAAAAAGbFRozqBCF29M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -176, + "top": -16, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 352, + "top": 88, + "width": 137.55322265625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGbFRozqBCG6fc=" + }, + "nameLabel": { + "$ref": "AAAAAAGbFRozqBCHSDU=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGbFRozqBCIG8w=" + }, + "propertyLabel": { + "$ref": "AAAAAAGbFRozqBCJk78=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGbFRozqRCK1WE=", + "_parent": { + "$ref": "AAAAAAGbFRozqBCEWV0=" + }, + "model": { + "$ref": "AAAAAAGbFRozpxCCny8=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGbFRpmMhCvs1I=", + "_parent": { + "$ref": "AAAAAAGbFRozqRCK1WE=" + }, + "model": { + "$ref": "AAAAAAGbFRpmIRCstPg=" + }, + "font": "Arial;13;0", + "left": 357, + "top": 118, + "width": 127.55322265625, + "height": 13, + "text": "+width: int", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGbFRqDBBC2wj8=", + "_parent": { + "$ref": "AAAAAAGbFRozqRCK1WE=" + }, + "model": { + "$ref": "AAAAAAGbFRqC+RCzcFY=" + }, + "font": "Arial;13;0", + "left": 357, + "top": 133, + "width": 127.55322265625, + "height": 13, + "text": "+height: int", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGbFRrlqhC9ook=", + "_parent": { + "$ref": "AAAAAAGbFRozqRCK1WE=" + }, + "model": { + "$ref": "AAAAAAGbFRrlohC693g=" + }, + "font": "Arial;13;0", + "left": 357, + "top": 148, + "width": 127.55322265625, + "height": 13, + "text": "+pixels: tableau Pixel", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 352, + "top": 113, + "width": 137.55322265625, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGbFRozqRCL3Ok=", + "_parent": { + "$ref": "AAAAAAGbFRozqBCEWV0=" + }, + "model": { + "$ref": "AAAAAAGbFRozpxCCny8=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGbFRwGLBDGDdo=", + "_parent": { + "$ref": "AAAAAAGbFRozqRCL3Ok=" + }, + "model": { + "$ref": "AAAAAAGbFRwGIRDDyhA=" + }, + "font": "Arial;13;0", + "left": 357, + "top": 171, + "width": 127.55322265625, + "height": 13, + "text": "+getPixel(): Pixel", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGbFRxgUhDQyxw=", + "_parent": { + "$ref": "AAAAAAGbFRozqRCL3Ok=" + }, + "model": { + "$ref": "AAAAAAGbFRxgShDNMhQ=" + }, + "font": "Arial;13;0", + "left": 357, + "top": 186, + "width": 127.55322265625, + "height": 13, + "text": "+setPixel(x, y, p): void", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 352, + "top": 166, + "width": 137.55322265625, + "height": 38 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGbFRozqRCMh+s=", + "_parent": { + "$ref": "AAAAAAGbFRozqBCEWV0=" + }, + "model": { + "$ref": "AAAAAAGbFRozpxCCny8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -88, + "top": -8, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGbFRozqRCNOto=", + "_parent": { + "$ref": "AAAAAAGbFRozqBCEWV0=" + }, + "model": { + "$ref": "AAAAAAGbFRozpxCCny8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -88, + "top": -8, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 352, + "top": 88, + "width": 136.55322265625, + "height": 116, + "nameCompartment": { + "$ref": "AAAAAAGbFRozqBCF29M=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGbFRozqRCK1WE=" + }, + "operationCompartment": { + "$ref": "AAAAAAGbFRozqRCL3Ok=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGbFRozqRCMh+s=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGbFRozqRCNOto=" + } + }, + { + "_type": "UMLDependencyView", + "_id": "AAAAAAGbFR0tLhD43VE=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGbFR0tLhD2yjU=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGbFR0tLhD5VZQ=", + "_parent": { + "$ref": "AAAAAAGbFR0tLhD43VE=" + }, + "model": { + "$ref": "AAAAAAGbFR0tLhD2yjU=" + }, + "font": "Arial;13;0", + "left": 262, + "top": 141, + "width": 30.7099609375, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGbFR0tLhD43VE=" + }, + "edgePosition": 1, + "text": "+Use" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGbFR0tLhD6Nxc=", + "_parent": { + "$ref": "AAAAAAGbFR0tLhD43VE=" + }, + "model": { + "$ref": "AAAAAAGbFR0tLhD2yjU=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 276, + "top": 156, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGbFR0tLhD43VE=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGbFR0tLhD7edQ=", + "_parent": { + "$ref": "AAAAAAGbFR0tLhD43VE=" + }, + "model": { + "$ref": "AAAAAAGbFR0tLhD2yjU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 280, + "top": 112, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGbFR0tLhD43VE=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGbFRd1rBAqXv8=" + }, + "tail": { + "$ref": "AAAAAAGbFRozqBCEWV0=" + }, + "lineStyle": 1, + "points": "351:140;207:127", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGbFR0tLhD5VZQ=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGbFR0tLhD6Nxc=" + }, + "propertyLabel": { + "$ref": "AAAAAAGbFR0tLhD7edQ=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGbFR2TjxENrtk=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGbFR2TjxEL1EQ=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGbFR2TjxEORz4=", + "_parent": { + "$ref": "AAAAAAGbFR2TjxENrtk=" + }, + "model": { + "$ref": "AAAAAAGbFR2TjxEL1EQ=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGbFR2TjxEP6rg=", + "_parent": { + "$ref": "AAAAAAGbFR2TjxEORz4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -16, + "top": -272, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGbFR2TjxEQJw0=", + "_parent": { + "$ref": "AAAAAAGbFR2TjxEORz4=" + }, + "font": "Arial;13;1", + "left": 101, + "top": 311, + "width": 99.7314453125, + "height": 13, + "text": "FrequencyTable" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGbFR2TjxERAvo=", + "_parent": { + "$ref": "AAAAAAGbFR2TjxEORz4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -16, + "top": -272, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGbFR2TjxES6k4=", + "_parent": { + "$ref": "AAAAAAGbFR2TjxEORz4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -16, + "top": -272, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 96, + "top": 304, + "width": 109.7314453125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGbFR2TjxEP6rg=" + }, + "nameLabel": { + "$ref": "AAAAAAGbFR2TjxEQJw0=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGbFR2TjxERAvo=" + }, + "propertyLabel": { + "$ref": "AAAAAAGbFR2TjxES6k4=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGbFR2TkBETcNQ=", + "_parent": { + "$ref": "AAAAAAGbFR2TjxENrtk=" + }, + "model": { + "$ref": "AAAAAAGbFR2TjxEL1EQ=" + }, + "font": "Arial;13;0", + "left": 96, + "top": 329, + "width": 109.7314453125, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGbFR2TkBEUPbs=", + "_parent": { + "$ref": "AAAAAAGbFR2TjxENrtk=" + }, + "model": { + "$ref": "AAAAAAGbFR2TjxEL1EQ=" + }, + "font": "Arial;13;0", + "left": 96, + "top": 339, + "width": 109.7314453125, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGbFR2TkBEVyZ8=", + "_parent": { + "$ref": "AAAAAAGbFR2TjxENrtk=" + }, + "model": { + "$ref": "AAAAAAGbFR2TjxEL1EQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -8, + "top": -136, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGbFR2TkBEWW/g=", + "_parent": { + "$ref": "AAAAAAGbFR2TjxENrtk=" + }, + "model": { + "$ref": "AAAAAAGbFR2TjxEL1EQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -8, + "top": -136, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 96, + "top": 304, + "width": 108.7314453125, + "height": 45, + "nameCompartment": { + "$ref": "AAAAAAGbFR2TjxEORz4=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGbFR2TkBETcNQ=" + }, + "operationCompartment": { + "$ref": "AAAAAAGbFR2TkBEUPbs=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGbFR2TkBEVyZ8=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGbFR2TkBEWW/g=" + } + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGbFRd1qxAoJLU=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Pixel", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGbFRe75hBSfjk=", + "_parent": { + "$ref": "AAAAAAGbFRd1qxAoJLU=" + }, + "name": "r", + "visibility": "private", + "type": "int" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGbFRf+WBBYjHk=", + "_parent": { + "$ref": "AAAAAAGbFRd1qxAoJLU=" + }, + "name": "g", + "visibility": "private", + "type": "int" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGbFRgNXxBe9YA=", + "_parent": { + "$ref": "AAAAAAGbFRd1qxAoJLU=" + }, + "name": "b", + "visibility": "private", + "type": "int" + }, + { + "_type": "UMLPort", + "_id": "AAAAAAGbFRl8ehBrIG0=", + "_parent": { + "$ref": "AAAAAAGbFRd1qxAoJLU=" + }, + "name": "Port1", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGbFRmd8RBycuE=", + "_parent": { + "$ref": "AAAAAAGbFRd1qxAoJLU=" + }, + "name": "Attribute1", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGbFRm0mhB5BV0=", + "_parent": { + "$ref": "AAAAAAGbFRd1qxAoJLU=" + }, + "name": "getterSetter" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGbFRozpxCCny8=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "RGBImage", + "ownedElements": [ + { + "_type": "UMLDependency", + "_id": "AAAAAAGbFR0tLhD2yjU=", + "_parent": { + "$ref": "AAAAAAGbFRozpxCCny8=" + }, + "name": "Use", + "source": { + "$ref": "AAAAAAGbFRozpxCCny8=" + }, + "target": { + "$ref": "AAAAAAGbFRd1qxAoJLU=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGbFRpmIRCstPg=", + "_parent": { + "$ref": "AAAAAAGbFRozpxCCny8=" + }, + "name": "width", + "type": "int" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGbFRqC+RCzcFY=", + "_parent": { + "$ref": "AAAAAAGbFRozpxCCny8=" + }, + "name": "height", + "type": "int" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGbFRrlohC693g=", + "_parent": { + "$ref": "AAAAAAGbFRozpxCCny8=" + }, + "name": "pixels", + "type": "tableau Pixel" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGbFRwGIRDDyhA=", + "_parent": { + "$ref": "AAAAAAGbFRozpxCCny8=" + }, + "name": "getPixel", + "parameters": [ + { + "_type": "UMLParameter", + "_id": "AAAAAAGbFRw2CxDKLAY=", + "_parent": { + "$ref": "AAAAAAGbFRwGIRDDyhA=" + }, + "type": { + "$ref": "AAAAAAGbFRd1qxAoJLU=" + }, + "direction": "return" + } + ] + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGbFRxgShDNMhQ=", + "_parent": { + "$ref": "AAAAAAGbFRozpxCCny8=" + }, + "name": "setPixel", + "parameters": [ + { + "_type": "UMLParameter", + "_id": "AAAAAAGbFRyKBBDUmu4=", + "_parent": { + "$ref": "AAAAAAGbFRxgShDNMhQ=" + }, + "type": "void", + "direction": "return" + }, + { + "_type": "UMLParameter", + "_id": "AAAAAAGbFRyw7RDXjZw=", + "_parent": { + "$ref": "AAAAAAGbFRxgShDNMhQ=" + }, + "name": "x", + "type": "" + }, + { + "_type": "UMLParameter", + "_id": "AAAAAAGbFRyw7RDY/m4=", + "_parent": { + "$ref": "AAAAAAGbFRxgShDNMhQ=" + }, + "name": "y", + "type": "" + }, + { + "_type": "UMLParameter", + "_id": "AAAAAAGbFRyw7RDZwYI=", + "_parent": { + "$ref": "AAAAAAGbFRxgShDNMhQ=" + }, + "name": "p", + "type": "" + } + ] + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGbFR2TjxEL1EQ=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "FrequencyTable" + } + ] + } + ] +} \ No newline at end of file diff --git a/PlaningDeTavail.md b/PlaningDeTavail.md new file mode 100644 index 0000000..c6f0998 --- /dev/null +++ b/PlaningDeTavail.md @@ -0,0 +1,198 @@ +# Sprint Planning – Projet PIF + +## Légende +AD → Algassimou +AA → Ayoub +YB → Youness + +🟥 TODO = À faire +🟨 DOING = En cours +🟩 DONE = Terminé + + +# --------------------------------------- +# SPRINT 1 (13–20 décembre 2025) +# --------------------------------------- +Objectif : Mise en place des fondations techniques +(image, binaire, Huffman, canoniques) + +| US | Assigné | Statut | | Description | +|----------|---------|--------|-----|-------------| +| US-D1 | AD | TODO | 🟥 | Implémenter BitInputStream (lecture bit par bit) | +| US-D2 | AD | TODO | 🟥 | Implémenter BitOutputStream (écriture bit par bit) | +| US-D3 | AD | TODO | 🟥 | Générer les tables de fréquences RGB | +| US-D4 | AD | TODO | 🟥 | Construire l’arbre Huffman | +| US-D5 | AA | TODO | 🟥 | Générer les codes Huffman | +| US-D6 | AA | TODO | 🟥 | Générer les codes canoniques | +| US-U5 | YB | TODO | 🟥 | Chargement d’image via ImageIO | +| US-D8 | YB | TODO | 🟥 | Structure RGBImage + Pixel | +| US-P1 | AA | TODO | 🟥 | Interface simple d’affichage des fréquences | +| US-P2 | AD | TODO | 🟥 | Interface simple d’affichage Huffman | +| US-P3 | AA | TODO | 🟥 | Interface simple d’affichage canoniques | + +## Fichiers à créer – Sprint 1 + +### `src/mimage/` +| Nom du fichier | Rôle | +|----------------|-------| +| `Pixel.java` | Représente un pixel (r, g, b) | +| `RGBImage.java` | Matrice de pixels + utilitaires | + +### `src/mhuffman/` +| Nom du fichier | Rôle | +|----------------|-------| +| `FrequencyTable.java` | Stocke les fréquences R/G/B | +| `HuffmanNode.java` | Nœud d’arbre Huffman | +| `HuffmanTree.java` | Construction de l’arbre + génération des codes | +| `CanonicalCode.java` | Génération des codes canoniques | + +### `src/util/` +| Nom du fichier | Rôle | +|----------------|-------| +| `BitInputStream.java` | Lecture bit par bit | +| `BitOutputStream.java` | Écriture bit par bit | +| `ByteUtils.java` | Conversions entiers ↔ octets | +| `FileUtils.java` | Méthodes utilitaires fichiers | + +### `src/vconverter/` +| Nom du fichier | Rôle | +|----------------|-------| +| `ConverterWindow.java` | Fenêtre du convertisseur | +| `PreviewPanel.java` | Aperçu de l’image chargée | +| `FrequencyTablePanel.java` | Affichage fréquences RGB | +| `CodeTablePanel.java` | Affichage Huffman + canoniques | + +### `src/` (racine) +| Nom du fichier | Rôle | +|----------------|-------| +| `ConverterController.java` | Contrôleur du convertisseur | +| `Main.java` | Lancement du convertisseur (Sprint 1) | + +--- + +### Résultat attendu Sprint 1 +- Compression entièrement fonctionnelle +- Import d’image opérationnel +- GUI minimaliste affichant fréquences / Huffman / canoniques +- Aucun fichier `.pif` encore écrit + + +# --------------------------------------- +# SPRINT 2 (20–27 décembre 2025) +# --------------------------------------- +Objectif : Écriture du format `.pif` + finalisation convertisseur + +| US | Assigné | Statut | | Description | +|------------|---------|--------|-----|-------------| +| US-D2 | AD | TODO | 🟥 | Vérifier BitOutputStream avec flux réel | +| US-C5 | AD | TODO | 🟥 | Implémenter PIFWriter (header + tables + pixels compressés) | +| US-U6 | AD | TODO | 🟥 | Exporter une image en `.pif` | +| US-P1 | AA | TODO | 🟥 | Finaliser affichage des fréquences | +| US-P2 | YB | TODO | 🟥 | Finaliser affichage codes Huffman | +| US-P3 | AA | TODO | 🟥 | Finaliser affichage codes canoniques | +| US-U7 | YB | TODO | 🟥 | Implémenter l’aperçu (PreviewPanel) | +| US-D3..D6 | YB | TODO | 🟥 | Lier interface convertisseur ↔ compression | + +## Fichiers à créer – Sprint 2 + +### `src/mpif/` +| Nom du fichier | Rôle | +|----------------|-------| +| `PIFWriter.java` | Écriture du fichier `.pif` | + +### `src/vconverter/` (complément) +| Nom du fichier | Rôle | +|----------------|-------| +| `SavePanel.java` (optionnel) | UI pour sauvegarde `.pif` | + +### `src/` +| Nom du fichier | Rôle | +|----------------|-------| +| *(aucun nouveau fichier obligatoire)* | Le reste se fait dans les fichiers existants | + +--- + +### Résultat attendu Sprint 2 +- `.pif` généré correctement +- Convertisseur fonctionnel à 80 % +- UI complète pour la consultation des tables +- Aperçu image fonctionnel + + +# --------------------------------------- +# SPRINT 3 (27 décembre 2025 – 3 janvier 2026) +# --------------------------------------- +Objectif : Lecture du fichier `.pif` + visualisateur opérationnel + +| US | Assigné | Statut | | Description | +|----------|---------|--------|-----|-------------| +| US-D7 | AD | TODO | 🟥 | Reconstruire les codes canoniques depuis fichier | +| US-D8 | AD | TODO | 🟥 | Décoder pixels (implémenter PIFReader) | +| US-U1 | YB | TODO | 🟥 | Ouvrir `.pif` via argument ou JFileChooser | +| US-U2 | AA | TODO | 🟥 | Afficher l’image dans une fenêtre | +| US-U3 | AA | TODO | 🟥 | Centrer l’image si elle est petite | +| US-U4 | AD | TODO | 🟥 | Déplacement de l’image à la souris | +| US-P6 | AA | TODO | 🟥 | Préparer diagrammes UML | + +## Fichiers à créer – Sprint 3 + +### `src/mpif/` +| Nom du fichier | Rôle | +|----------------|-------| +| `PIFReader.java` | Lecture et décodage du `.pif` | + +### `src/vviewer/` +| Nom du fichier | Rôle | +|----------------|-------| +| `ViewerWindow.java` | Fenêtre principale | +| `ImagePanel.java` | Affichage + déplacement de l’image | + +### `src/` +| Nom du fichier | Rôle | +|----------------|-------| +| `ViewerController.java` | Contrôleur du visualisateur | +| `MainViewer.java` | Programme principal visualisateur | + +--- + +### Résultat attendu Sprint 3 +- Visualisateur 100 % fonctionnel +- Lecture complète du format `.pif` +- Image affichée, centrée, déplaçable +- UML structurel prêt pour rapport + + +# --------------------------------------- +# SPRINT 4 (3–10 janvier 2026) +# --------------------------------------- +Objectif : Finalisation complète + livrable final + +| US | Assigné | Statut | | Description | +|------------|---------|--------|-----|-------------| +| US-P5 | AD | TODO | 🟥 | Javadoc complète | +| US-P7 | AD | TODO | 🟥 | Makefile (compilation + jar + exécution) | +| US-P6 | AA | TODO | 🟥 | Finalisation des diagrammes UML | +| Tests | YB | TODO | 🟥 | Tests convertisseur + visualisateur | +| Rapport | AD/AA/YB| TODO | 🟥 | Rédaction rapport complet | +| Livraison | AD/AA/YB| TODO | 🟥 | Vérification dépôt Gitea + JAR exécutables | + +## Fichiers à créer – Sprint 4 + +### Racine creee tout au long +| Nom du fichier | Rôle | +|----------------|-------| +| `Makefile` | Compilation + génération `.jar` | + +### `/doc` (optionnel) +| Nom du fichier | Rôle | +|----------------|-------| +| `rapport.pdf` | Livrable final | +| `uml.puml` | Sources de diagrammes | + +--- + +### Résultat attendu Sprint 4 +- Rapport PDF validé +- Diagrammes UML terminés +- Makefile opérationnel +- Projet soumis proprement sur Gitea diff --git a/ProductBacklog.MD b/ProductBacklog.MD new file mode 100644 index 0000000..7e3e48e --- /dev/null +++ b/ProductBacklog.MD @@ -0,0 +1,90 @@ +# PRODUCT BACKLOG — Projet PIF + + +# 1. US UTILISATEUR +Ce sont les besoins réels d’un utilisateur final qui voudrait simplement visualiser ou convertir une image. + +--- + +### **US-U1 — Ouvrir un fichier PIF** +En tant qu’utilisateur, je veux pouvoir ouvrir un fichier `.pif` via un argument ou un sélecteur de fichiers, afin d’afficher l’image. + +### **US-U2 — Afficher l’image dans une fenêtre** +En tant qu’utilisateur, je veux voir l’image affichée dans une fenêtre redimensionnable. + +### **US-U3 — Centrage automatique** +En tant qu’utilisateur, je veux que l’image soit centrée si elle est plus petite que la fenêtre, pour une meilleure visibilité. + +### **US-U4 — Déplacement de l’image** +En tant qu’utilisateur, je veux pouvoir déplacer l’image à la souris si elle dépasse la taille de la fenêtre. + +### **US-U5 — Charger une image RGB (PNG/JPEG)** +En tant qu’utilisateur, je veux charger une image standard afin de la convertir en `.pif`. + +### **US-U6 — Exporter une image au format PIF** +En tant qu’utilisateur, je veux enregistrer l’image sous format `.pif`. + +### **US-U7 — Aperçu de l’image avant conversion** +En tant qu’utilisateur, je veux voir une miniature de l’image chargée. + +--- + +# 2. US DÉVELOPPEUR +Ce sont les besoins techniques indispensables au fonctionnement interne du format PIF. + +--- + +### **US-D1 — Lire des bits depuis un flux** +Le système doit permettre la lecture bit par bit depuis un fichier PIF. + +### **US-D2 — Écrire des bits dans un fichier** +Le système doit permettre l’écriture de bits pour générer un fichier PIF. + +### **US-D3 — Construire les tables de fréquences RGB** +Le système doit analyser l’image pour obtenir les fréquences des valeurs R, G, B. + +### **US-D4 — Construire un arbre de Huffman** +Le système doit créer un arbre à partir des fréquences d’une composante. + +### **US-D5 — Générer les codes Huffman** +Le système doit produire les codes initiaux à partir de l’arbre. + +### **US-D6 — Générer les codes canoniques** +Le système doit transformer les codes Huffman en codes canoniques. + +### **US-D7 — Reconstruire les codes canoniques en lecture** +Le système doit pouvoir reconstruire les codes à partir des longueurs contenues dans le fichier .pif. + +### **US-D8 — Décoder un fichier PIF** +Le système doit pouvoir reconstituer l’image RGB à partir des données compressées. + +--- + +# 3. US PROFESSEUR (PEDAGOGIQUE) +Ces fonctionnalités n’ont **aucune utilité pour un utilisateur réel**, mais sont demandées par le professeur pour vérifier le bon fonctionnement de notre projet. + +--- + +### **US-P1 — Affichage des tables de fréquences** +En tant que professeur, je veux consulter la table de fréquences R, G et B pour vérifier que le calcul est correct. + +### **US-P2 — Affichage des codes Huffman** +En tant que professeur, je veux voir les codes Huffman générés afin de valider votre algorithme. + +### **US-P3 — Affichage des codes canoniques** +En tant que professeur, je veux visualiser les codes canoniques afin d’évaluer votre compréhension de leur construction. + +### **US-P4 — Affichage de l’arbre Huffman (optionnel)** +En tant que professeur, je veux pouvoir inspecter la structure de l’arbre pour vérifier votre implémentation. + +### **US-P5 — Documentation Javadoc pour chaque classe** +En tant que professeur, je veux avoir une documentation claire auto-générable. + +### **US-P6 — Diagrammes UML dans le rapport** +En tant que professeur, je veux retrouver un diagramme de classes et un diagramme d’objets dans le rapport. + +### **US-P7 — Makefile complet** +En tant que professeur, je veux pouvoir compiler les deux programmes en .jar exécutables avec un Makefile clair. + + + diff --git a/Sprint1 planttext Stand By.png b/Sprint1 planttext Stand By.png new file mode 100644 index 0000000..2b1d3e6 Binary files /dev/null and b/Sprint1 planttext Stand By.png differ