Download - EIFFEL TIME

Transcript
Page 1: EIFFEL TIME

EIFFELTIME

Készítette: Árvai Mária Tünde

[email protected]

people.inf.elte.hu/fluke/eiffel

Page 2: EIFFEL TIME

3 típus:

• abszolút (pl. "Mennyi az idő?")

• intervallum

• időtartam (az időintervallum hossza)

Page 3: EIFFEL TIME

Abszolút

konstansok:TIME_VALUE DATE_VALUE DATE_TIME_VALUE

DATETIME

DATE_TIME

DATE_DURATIONTIME_DURATION

DATE_TIME_DURATION

Page 4: EIFFEL TIME

Származás

COMPARABLE

ABSOLUTE

DATE, TIME, DATE_TIME

Page 5: EIFFEL TIME

TIME

• órák

• percek

• másodpercek

Page 6: EIFFEL TIME

TIME létrehozása

• make(h,m,s: INTEGER)• make_now: a rendszeridő lekérdezése• make_by_seconds(sec: INTEGER)

Page 7: EIFFEL TIME

TIME műveletei

• összehasonlítás: <, <=, >, >=, is_equal, =

• beállítás: set_hour(h: INTEGER)set_minute(m: INTEGER)set_second(s: INTEGER)

Page 8: EIFFEL TIME

TIME műveletei

• összeadás:hour_add(h: INTEGER)minute_add(m: INTEGER)second_add(s: INTEGER)

• rákövetkező, megelőző:hour_forth, hour_backminute_forth, minute_backsecond_forth, second_back

Page 9: EIFFEL TIME

DATE

• évek

• hónapok

• napok

Az időszámítás kezdete: 01/01/1600

Page 10: EIFFEL TIME

DATE létrehozása

• make(y,m,d: INTEGER)make_month_day_year

(m,d,y: INTEGER)make_day_month_year

(d,m,y: INTEGER)• make_now: rendszerdátum• make_by_days(n: INTEGER):

az eltelt napok száma

Page 11: EIFFEL TIME

DATE műveletei

• összehasonlítás: <, <=, >, >=, is_equal, =

• beállítás: set_year(y: INTEGER)set_month(m: INTEGER)set_day(d: INTEGER)(korlátok: set_month_cut_days,set_year_cut_days)

Page 12: EIFFEL TIME

DATE műveletei

• összeadás:year_add(y: INTEGER)month_add(m: INTEGER)day_add(d: INTEGER)(augusztus 31. + 1 hónap = szeptember 30.)

• rákövetkező, megelőző:year_forth, year_backmonth_forth, month_backday_forth, day_back

Page 13: EIFFEL TIME

DATE_TIME létrehozása

• make(y,mo,d,h,mi,s: INTEGER)• make_now: rendszerdátum, rendszeridő• make_by_date_time(d: DATE, t: TIME)

• make_by_date(d: DATE)

Page 14: EIFFEL TIME

DATE_TIME műveletei

• összehasonítható

• elemenként változtatható

Page 15: EIFFEL TIME

Intervallum

• INTERVALLUM osztály

• Két ugyanolyan, ABSOLUTE-ból származó osztály példányával foglalkozik

• start_bound, end_bound

Page 16: EIFFEL TIME

Származás

COMPARABLE

ABSOLUTE

INTERVALLUM

Page 17: EIFFEL TIME

INTERVALLUM létrehozása

• make(s,e: G)• set_start_bound(s: G)set_end_bound(e: G)

Page 18: EIFFEL TIME

INTERVALLUM műveletei

• összehasonlítás:is_equal: értékeket és nem referenciákat <, <=, >, >=int1 < int2, ha int1 kezdete és

vége szigorúan megelőzi int2-t

Page 19: EIFFEL TIME

INTERVALLUM műveletei

• intersects: két intervallum metszete• overlaps: van-e metszetükis_overlapped_by: az ellentéte

• meets, is_met_by: van-e közös határuk• includes strict_includesis_included_by is_strict_included_by

Page 20: EIFFEL TIME

INTERVALLUM műveletei

• empty: egyenlőek a határok

• adott elem kapcsolata az intervallummalhas(v: G)strict_before(v: G) strict_after(v: G)before(v: G)after(v: G)

Page 21: EIFFEL TIME

INTERVALLUM műveletei

• union• intersection• gather: unió, de kell közös rész

Page 22: EIFFEL TIME

Időtartam

• DATE_DURATIONTIME_DURATION DATE_TIME_DURATIONosztályok

Page 23: EIFFEL TIME

Származás

GROUP_ELEMENT PART_COMPARABLE

DURATION

DATE_DURATIONTIME_DURATION

DATE_TIME_DURATION

Page 24: EIFFEL TIME

TIME_DURATION létrehozása

• make(h,m,s: INTEGER)• make_by_seconds(s: INTEGER)

Page 25: EIFFEL TIME

TIME_DURATION műveletei

• összehasonlítás: <, <=, >, >=, is_equal, =1:-40:0 < 0:0:1800

• beállítás: set_hour(h: INTEGER)set_minute(m: INTEGER)set_second(s: INTEGER)

Page 26: EIFFEL TIME

TIME_DURATION műveletei

• összeadás:hour_add(h: INTEGER)minute_add(m: INTEGER)second_add(s: INTEGER)

• +, -

Page 27: EIFFEL TIME

TIME_DURATION műveletei

konverzió:• to_days25:70:600 => 1 (day)-23:-80:300 => 2 (day)

• time_modulo_day25:70:600 => 2:20:0-23:-80:300 => 23:45:0

Page 28: EIFFEL TIME

kanonikus TIME_DURATION

canonical• pozitív: óra, perc, másodperc >= 0

perc, másodperc < 60

• negatív: óra, perc, másodperc <= 0perc, másodperc > -60

Page 29: EIFFEL TIME

DATE_DURATION

• bonyolult

• két típus: definite és relative

Page 30: EIFFEL TIME

definite DATE_DURATION

• definite = true• év, hónap = 0 <=> definite

Page 31: EIFFEL TIME

definite DATE_DURATION műveletei

• összehasonlítás: <, <=, >, >=, is_equal, =csak két definite hasonlítható össze, különben hamisat ad

• kanonikus definite

Page 32: EIFFEL TIME

relative DATE_DURATION

• definite = false• év, hónap, nap > 0

Page 33: EIFFEL TIME

relative DATE_DURATION műveletei

• nem összehasonlítható• <, > mindig hamisat ad• is_equal

Page 34: EIFFEL TIME

kanonikus relative DATE_DURATION

• canonical(date: DATE)• 1 <= hónap <= 12, 1 <= nap <= 30 (28)

• nem mindig tudunk 30 napot 1 hónappá konvertálni

• 01/15 – 02/14: kanonikus, nem tudunk

• 04/15 – 05/15: nem kanonikus => 1 hónap

• pozitív, negatív lehet

Page 35: EIFFEL TIME

DATE_DURATION létrehozása

• make(y,m,d: INTEGER)ha y=m=0, akkor definite

• make_by_days(n: INTEGER)definite

Page 36: EIFFEL TIME

DATE_DURATION műveletei

• összehasonlítás

• beállítás: set_date(y,m,d: INTEGER)set_year(y: INTEGER)set_month(m: INTEGER)set_day(d: INTEGER)

Page 37: EIFFEL TIME

kanonikus DATE_DURATION

• canonical(date: DATE)• to_canonical

Page 38: EIFFEL TIME

DATE_TIME_DURATION

• definite és relative

• kanonikus és nem kanonikus

Page 39: EIFFEL TIME

DATE_TIME_DURATIONlétrehozása

• make(y,mo,d,h,mi,s: INTEGER)• make_definite(d,h,m,s: INTEGER)• make_by_date(d: DATE_DURATION)

idő = 0.0.0• make_by_date_time (d: DATE_DURATION,t: TIME_DURATION)

Page 40: EIFFEL TIME

DATE_TIME_DURATIONműveletei

• összehasonlítás: <, <=, >, >=, is_equal, =ha mindkettő definite, akkor a napok összehasonlíthatóak, különben hamisat ad

• beállítás: set_date(d: DATE_DURATION)set_time(t: TIME_DURATION)

Page 41: EIFFEL TIME

kanonikus DATE_TIME_DURATION

• canonical• to_canonical: csak ha mind a DATE,

mind a TIME kanonikus• time_to_canonical

Page 42: EIFFEL TIME

DATE és TIMEstringgé konvertálása

Page 43: EIFFEL TIME

Pontosság

TIME_VALUE• fine_second• fractional_second

Page 44: EIFFEL TIME

TIME, TIME_DURATION

létrehozás:• make_fine(h,m: INTEGER, s: DOUBLE)

• make_by_fine_seconds(sec: INTEGER)

beállítás:• set_fine_second(s: DOUBLE)• set_fractionals(f: DOUBLE)

Page 45: EIFFEL TIME

fine műveletei

• fine_seconds_add(f: DOUBLE)• canonical, to_canonical

Page 46: EIFFEL TIME

people.inf.elte.hu/fluke/eiffel