Avatar billede martin_schou Nybegynder
30. oktober 2002 - 16:24 Der er 23 kommentarer og
1 løsning

Simple klasser til komplicerede ting

Ja, lam overskrift :-)

Jeg er ved at prøve at stykke et pakkehieraki sammen og forsøger at gøre det så simpelt som muligt, da jeg arbejder på yderst begrænset plads.

Jeg har nogle forskellige elementer/objekttyper i min problembeskrivelse, som har nogle meget ens udseender - kort fortalt har de følgende ens ting:

Kan indeholde:
0 ... 1 stykker grafik;
0 ... n stykker tekst;
1 ... n SNVT-objekter (don't ask);

Da SNVT-objekterne basalt set er Strings opbygget på forskellige måder, har jeg en interesse i nogle bestemte metoder:

hasChanged //noget i den stil; publisher/subscriber-mønster.

getHumanReadableFormatAt(index) //kommer an på SNVT-objektet og bl.a. her kommer problematikken ind i billedet.

Jeg ville gerne kunne løse problemet vha. en enkelt klasse, der kan morphes til forskellig opførsel udfra nogle udefra-kommende indstillinger, f.eks. Properties-filer, så jeg kan ændre opførsel i systemet uden at skulle rekompilere et helt program, men jeg har ikke lige fantasi/evner/kendskab til hvordan i alverden man kan gøre det.

Jeg leder ikke så meget efter "send det til mig, så laver jeg det" men mere efter "læs denne bog, kig på dette website, læs disse artikler og kig i disse eksempler". Evt. henvisninger til nogle patterns, der vil være brugbare.

Hvis dette ikke er grundigt nok beskrevet, og det er nødvendigt med noget mere specifikt i forhold til min problem-stilling, så sig endelig til :-)
Avatar billede arne_v Ekspert
30. oktober 2002 - 16:32 #1
Umiddelbart lyder det jo mest som et state pattern.
Avatar billede martin_schou Nybegynder
30. oktober 2002 - 16:50 #2
Hmm ... måske ... måske ikke ... er lige ved at læse op på State, men umiddelbart tyder det på, at jeg skal implementere de forskellige opførsler, hvilket kan gå hen og give problemer i forhold til den begrænsede plads, jeg har at lege med.

Umiddelbart ser det ud til, at State kræver, at jeg på forhånd skal kende alle de tilstande/opførsler, mit program kan komme ud for/have, hvilket selvfølgelig er en god idé, men det kan jeg ikke blot gå ud fra her.

Sig lige til, hvis det er forkert opfattet.
Avatar billede martin_schou Nybegynder
30. oktober 2002 - 16:52 #3
This message was brought to you by the Department of Redundancy Department, who was happy to bring you a message.
Avatar billede arne_v Ekspert
30. oktober 2002 - 16:55 #4
Det er korrekt. State pattern er for forskellig opførsel, men kun for
et bestemt antal på forhånd kendte opførsler.

Men det er ret svært at lave en klasse som kan ændre opførsel
på måder som ikke er kendte på forhånd.
Avatar billede arne_v Ekspert
30. oktober 2002 - 16:58 #5
Medmindre dine krav til opførsel er meget
restrictede, så de er nemme at beskrive i
properties-fil/XML-config-file, så kan det være, at
du skal satse på dynamisk loading.

Din standard kode læse en properties-fil/XML-config-fil,
hvori optræder navnet på en klasse som loades og bruges
til at udføre en bestemt ting.

Meget anvendt (f.eks. log4j).
Avatar billede martin_schou Nybegynder
30. oktober 2002 - 17:02 #6
Tjaa, det er forholdsvis simpel opførsel, men igen:

"Din standard kode læse en properties-fil/XML-config-fil, hvori optræder navnet på en klasse som loades og bruges til at udføre en bestemt ting."

Det har jeg næppe plads til. Jeg har umiddelbart 165 forskellige SNVT-typer (vil jeg også helst kunne behandle på samme måde som ovenstående) og nok omkring 50 forskellige elementer (dem jeg beskrev ovenfor), og 108.000 bytes til at gemme ALT relevant for programmet på. Jeg ved ikke helt, om du kan se dilemmaet i at blot loade de klasser, der skal bruges?
Avatar billede arne_v Ekspert
30. oktober 2002 - 17:27 #7
Nu fylder Java klasser jo ikke så meget, men jeg kan godt
se problematikken.

Jeg formoder at XML også er udelukket så: de jar-filer
er ret store.

Er det du leder efter mere noget i retningen af, at du indlæser
en liste med ID'er og formaterings-beskrivelser, hvor du så
bruger formaterings-beskrivelsen svarende til ID på, hvad
nu du har ?
Avatar billede disky Nybegynder
30. oktober 2002 - 17:40 #8
Hej Martin.

Hvor stor forskel er der på de enkelte elementer ?

Arne:
Java klasser fylder en del når du skal have >100 af dem, prøv at lav en tom klasse og se hvad sådanne en .class fil fylder.
Avatar billede arne_v Ekspert
30. oktober 2002 - 19:12 #9
Den fylder 116 byte. Og ?
Avatar billede disky Nybegynder
30. oktober 2002 - 20:11 #10
Gange antal klasser så har du brugt 1/5 af hukommelse til rådighed, og dette er INDEN du putter noget i klasserne !!
Avatar billede martin_schou Nybegynder
31. oktober 2002 - 09:58 #11
Lidt mere uddybende forklaring og specifikke objekter i mit problem:

Elementer:

Analog motor - har 1 stykke grafik, 1 labels, har 4 SNVT-variabler hvoraf den kun tilgår en lille del af de 3.
digital motor - har 1 stykke grafik, 1 labels, har 2 SNVT-variabler som kun tilgåes delvist.

Temperatur-føler - har 1 stykke grafik, 1 label, 4 SNVT-variabler, hvoraf 1 kun tilgåes delvist; skal indeholde en historik over målte temperaturer i den sidste time
Tryk-føler - magen til temperatur-føler men uden historik og kun med positive værdier.

og så fremdeles.

Nogle af dem minder meget om hinanden (f.eks. temperatur- og tryk-følere) men har alligevel forskelle i deres opførsel.

Ud over disse elementer, som jeg kender, kan der også forekomme elementer, som jeg ikke kender på forhånd.


SNVT-variabler:
Div "typeangivelser" er taget fra dokumentationen på variablerne; jeg er ikke helt sikker på, den følger samme konvention som java hvad angår long.

Temperatur: 2 byte hex; signed long, præcision på 0,01°C. Efter konvertering fra hex til decimal divideres værdien med 100. Værdier fra -273,17 - +327,66; 0x7FFF == invalid data.

Tryk: 2 byte hex; signed long, præcision på 1 pa. Værdier fra -32.768 .. 32.766 Pascals. 0x7FFF == invalid data.

Count: 2 byte hex; unsigned long, præcision på 1, 0 ... 65.535.

Count_float: 4 byte hex, floating point, -1E38 ... 1E38.

De er for så vidt simple nok, da det er "simple" datatyper. Det bliver så værre med structs, selvom nogle af dem er simple nok:

Type Size - 2 bytes

Structure

typedef struct {
  unsigned bit0  : 1;
  unsigned bit1  : 1;
    .....
  unsigned bit15 : 1;
} SNVT_state;

Nogle af disse structs er dog MEGET værre:

Kopierer lige fra definitionen på den:

Type Size - 31 bytes

Structure

typedef struct {
  unsigned short char_set;
  unsigned long wide_char[15]; // 0..14 chars
} SNVT_str_int;                // NUL terminator

Field Definitions

Field    Units                    Valid Range      Notes
char_set  character set code    0 .. 255          TBD
wide_char 16 bit characters    15 characters;    String with zero terminator
                                each 0 .. 65,535

Da det også her ligger i emnets natur at have ukendte typer i forhold til "lige nu", så er jeg også her interesseret i en eller anden fiks/smart/genial måde at beskrive SNVT-variabler på, hvor man så vha. f.eks. properties kan få instantieret objekter med den opførsel og opbygning, som nu er relevant.

Jeg har som sagt 108.000 bytes at gøre godt med, og med en ~komprimering på 2:1 OG brug af obfuscation kan der nok godt regnes med ~250.000 bytes ... men det er måske lidt farligt at satse på så meget "bonusplads" :-/

Jeg håber, det hjælper på forståelsen for mit problem :-)
Avatar billede disky Nybegynder
31. oktober 2002 - 10:17 #12
hmmm, forsøg at gruppere de forskellige data du kan få i en eller flere klasser.
Avatar billede martin_schou Nybegynder
31. oktober 2002 - 10:51 #13
Disky:
Ja, det har jeg overvejet, og det vil være en del af løsningen - jeg mangler bare stadig den del, der indebærer, at jeg kan ændre opførsel ud fra en beskrivelse.

Hvis vi kigger på den simple del af det, så skal jeg have fundet en måde at beskrive f.eks. Tryk og Temperatur på samme måde, og derefter bruge disse parametre til at ændre et objekts væremåde.
Avatar billede disky Nybegynder
31. oktober 2002 - 10:57 #14
lav en int der definere forskelle på opførsel.

Problemmet er den blvier ret komplex :(
Avatar billede martin_schou Nybegynder
31. oktober 2002 - 11:03 #15
disky:
Det har jeg opdaget ... har forsøgt at finde en "smart" løsning den sidste måneds tid eller mere ...

nørj hvor jeg mangler en anden udvikler at "spille bold" med ...
Avatar billede disky Nybegynder
31. oktober 2002 - 12:34 #16
Har du mulighed for at sende en beskrivelse af diverse snvt'ere du kan modtage så kan jeg kigge lidt på det.
Avatar billede martin_schou Nybegynder
31. oktober 2002 - 12:59 #17
En oversigt over standard SNVT-variabler kan findes her:

http://www.tsd.org/ieee1473/SNVT.pdf
Avatar billede martin_schou Nybegynder
31. oktober 2002 - 17:18 #18
Disky: Fulgte din idé med at gruppere data. Det giver umiddelbart følgende opbygning:


Faste ting for simple typer:
Heltal:
Størrelse i bytes/chars i hex-string
Opløsning
Min
Max
Signed/unsigned

Float:
Størrelse i bytes/chars i hex-string
Opløsning
Min
Max
Signed/unsigned (er ikke lige sikker på denne)

Tekst:
Er i og for sig blot et index; bruges til at lave et opslag i et String[] (jeg kan selvfølgelig ikke lige finde en SNVT, hvor det er tilfældet ... gah!)

Dertil kommer så de komplicerede typer/structs:

De er som regel bygget op af simple typer, som f.eks. SNVT_str_int (#37) der indeholder 1 unsigned short og 15 unsigned long variabler.
Nogle af dem er dog lidt mere tricky, da de definerer deres egne simple typer, som f.eks. SNVT_chlr_status (#127), men i princippet er det jo også det samme.


Hvad jeg så lige kan bruge det til, har jeg ikke gennemskuet ... jeg har vist ikke fået nok sødemiddel tyndet op med kaffe.
Avatar billede martin_schou Nybegynder
01. november 2002 - 12:09 #19
Er der ikke et eller andet sted, man kan smide små billeder? Jeg er */_muligvis_/* ved at have en lille smule hul på SNVT-problematikken, men det er lidt svært at poste UML her ...
Avatar billede disky Nybegynder
01. november 2002 - 12:10 #20
smid dem på en webserver et sted.
Avatar billede martin_schou Nybegynder
01. november 2002 - 12:17 #21
Ja, det var planen, jeg har bare ikke lige en, jeg kan bruge ... derfor mit spørgsmål. Det var måske for svært at regne ud for en veluddannet ingeniør ;-p
Avatar billede disky Nybegynder
01. november 2002 - 12:53 #22
martin hvis du begynder på den slags gider jeg ikke hjælpe !

www.subnet.dk
Avatar billede martin_schou Nybegynder
30. januar 2003 - 15:06 #23
Nå, lukker spørgsmålet.
Avatar billede disky Nybegynder
30. januar 2003 - 15:30 #24
Jamen det er da ham stavekontrollen :)

Hej Martin :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Acrelec Danmark

IT-supporter

Cognizant Technology Solutions Denmark ApS

Sr. Test Analyst