Software-Projekt. Prof. Dr. Rainer Koschke. Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen

Größe: px
Ab Seite anzeigen:

Download "Software-Projekt. Prof. Dr. Rainer Koschke. Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen"

Transkript

1 Software-Projekt Prof. Dr. Rainer Koschke Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen Wintersemester 2008/09

2 Überblick I 1

3 1 Motivation Architekturkonformität Programmierrichtlinien Anhang Wiederholungsfragen Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 3 / 33

4 Lernziele Feinentwurf eines Systems durchführen können Programmierrichtlinien entwerfen, kennen und einhalten Verständnis für Codequalität entwickeln Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 4 / 33

5 Feinentwurf Der Feinentwurf ist die Brücke zwischen abstrakter Architektur und detailliertem Code. Er legt fest: Datenstrukturen Klassendiagramme mit zusätzlichen sdetails; (z.b. Navigierbarkeit, von Assoziationen, Behandlung von Mehrfachvererbung oder weiteren sklassen etc.) Abläufe Zustandsautomaten Aktivitätsdiagramme Sequenzdiagramme Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 5 / 33

6 Architekturkonformität Architekturbeschreibung und Quellcode sind zwei voneinander abhängige, aber separate Dokumente in der Weiterentwicklung werden oft Änderungen im Quellcode gemacht, die in der Architekturbeschreibung nicht nachgezogen werden Folge: Architekturbeschreibung wird obsolet Planung erfolgt aber meist auf Basis der Architekturbeschreibung Folge: böses Erwachen in der Umsetzung Reflektionsmethode von Murphy u. a. (1995, 2001) zur Synchronisation von Modulsicht und Quellcode Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 6 / 33

7 Reflektionsmethode (Murphy u. a. 2001) 1 Stelle Architekturmodell auf 2 Extrahiere smodell 3 Bilde Modelle aufeinander ab 4 Berechne Reflektionsmodell 5 Verfeinere/korrigiere Beispiel H1 H2 H3 Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 7 / 33

8 Warum Programmierrichtlinien? bis zu 80% der Gesamtkosten für Software sind Wartungskosten Originalautor wartet Software oft nicht selbst Code muss lesbar und verständlich sein Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 9 / 33

9 Programmierrichtlinien: Schlechte Beispiele i n k o n s i s t e n t e Methodennamen T e x t F i e l d. s e t T e x t ( ) ; L a b e l. s e t T e x t ( ) ; Button. s e t L a b e l ( ) ; A b s t r a c t B u t t o n. s e t T e x t ( ) ; i n k o n s i s t e n t e P a r a m e t e r s o r t i e r u n g S t r i n g B u f f e r. setcharat ( i n t index, c h a r c ) ; Vector. s e t E l e m e n t A t ( Object o, i n t i n d e x ) ; L i s t. s e t ( i n t index, Object o ) ; l e n g t h oder s i z e? l e n O f A r r a y = myarray. l e n g t h ; l e n O f S t r i n g = mystring. l e n g t h ( ) ; mylist. s i z e ( ) ; Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 11 / 33

10 Programmierrichtlinien: Sinnvolle Namen S i n n l o s e Namen s t a t i c f i n a l i n t ONE = 1 ; s t a t i c f i n a l i n t TEN = 1 0 ; s t a t i c f i n a l i n t TWENTY = 3 0 ; b e s s e r s t a t i c f i n a l i n t INPUT MODE = 1 ; s t a t i c f i n a l i n t INPUT BUFSIZE = 1 0 ; s t a t i c f i n a l i n t OUTPUT BUFSIZE = 3 0 ; Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 12 / 33

11 Programmierrichtlinien: Lokale Variablen Man kann s auch ü b e r t r e i b e n... f o r ( i n t o u t e r I n d e x = 0 ; o u t e r I n d e x < maxouterindex ; o u t e r I n d e x++) f o r ( i n t i n n e r I n d e x = 0 ; i n n e r I n d e x < o u t e r I n d e x ; i n n e r I n d e x++) r e s u l t M a t r i x [ o u t e r I n d e x ] [ i n n e r I n d e x ] = o u t e r I n d e x i n n e r I n d e x ; S c h l e i f e n v a r i a b l e n / I n d i z e s => k u r z e Namen f o r ( i n t i = 0 ; i < max ; i ++) f o r ( i n t j = 0 ; j < i ; j ++) r e s u l t [ i ] [ j ] = i j ; Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 13 / 33

12 Ausdrücke in natürlicher Form schwer v e r s t ä n d l i c h e r Ausdruck i f (! ( b l o c k I d < a c t b l k s )! ( b l o c k I d >= u n b l o c k s ) ) b e s s e r i f ( ( b l o c k I d >= a c t b l k s ) ( b l o c k I d < u n b l o c k s ) ) Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 14 / 33

13 Magische Zahlen Wer v e r s t e h t d i e s e Zahlen? m = 60 h + em ; s = 60 m + e s ; t c = 60 b + l c ; So i s t s b e s s e r. s t a t i c f i n a l s h o r t MINUTES PER HOUR = 6 0 ; s t a t i c f i n a l s h o r t SECONDS PER MINUTE = 6 0 ; s t a t i c f i n a l s h o r t CLIPS PER BOX = 6 0 ;... minutes = MINUTES PER HOUR h o u r s + e x t r a M i n u t e s ; s e c o n d s = SECONDS PER MINUTE minutes + e x t r a S e c o n d s ; t o t a l C l i p s = CLIPS PER BOX boxes + l o o s e C l i p s ; Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 15 / 33

14 Hartcodiert: String-Literale im Code t r y s t o r e. o p e n S t o r e (. / c o n f i g. xml, PSA ) ; manager. r e a d C o n f i g u r a t i o n ( s t o r e ) ; c a t c h ( T r e e S t o r e E x c e p t i o n e ) System. e r r. p r i n t l n ( Konnte K o n f i g u r a t i o n s d a t e i n i c h t l e s e n. ) ; c a t c h ( C o n f i g E x c e p t i o n x ) System. e r r. p r i n t l n ( F e h l e r beim A u s l e s e n d e r K o n f i g u r a t i o n s d a t e i. ) ; Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 16 / 33

15 Character sind zwar Zahlen, aber Wie b i t t e? i f ( ( c >= 65) && ( c <= 90) )... i f ( ( c >= A ) && ( c <= Z ) )... Ach so! i f ( C h a r a c t e r. i s U p p e r C a s e ( c ) ) Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 17 / 33

16 Sprachkonstrukte zur Berechnung von Größen Doppelte Z a h l e n r e f e r e n z c h a r buf [ ] = new c h a r [ ] ; f o r ( i n t i = 0 ; i < 1024; i ++) Sprachmechanismus nutzen! c h a r buf [ ] = new c h a r [ ] ; f o r ( i n t i = 0 ; i < buf. l e n g t h ; i ++) Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 18 / 33

17 Überflüssige Kommentare / d e f a u l t / d e f a u l t : b reak ; / r e t u r n SUCCESS / r e t u r n SUCCESS ; zerocount++: / I n c r e m e n t z e r o e n t r y c o u n t e r / / I n i t i a l i z e t o t a l to numberreceived. / Node. t o t a l = Node. numberreceived ; Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 19 / 33

18 Überflüssige Kommentare w h i l e ( ( ( c = getchar ( ) )!= EOF) && ( i s S p a c e ( c ) ) ) ; / s k i p w h i t e s p a c e / i f ( c == EOF) / end o f f i l e / t y p e = END OF FILE ; e l s e i f ( c == ( ) / l e f t paren / t y p e = LEFT PAREN ; e l s e i f ( c == ) ) / r i g h t paren / t y p e = RIGHT PAREN ; e l s e i f ( c == ; ) / s e m i c o l o n / t y p e = SEMICOLON ; e l s e i f ( isop ( c ) ) / o p e r a t o r / t y p e = OPERATOR; e l s e i f ( i s D i g i t ( c ) ) / number / t y p e = NUMBER;... Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 20 / 33

19 Verschluckte (hicks) Exceptions t r y F i l e O u t p u t S t r e a m out = new F i l e O u t p u t S t r e a m ( strname ) ;... out. f l u s h ( ) ; out. c l o s e ( ) ; c a t c h ( I O E x c e p t i o n e ) ; Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 21 / 33

20 idkldw i n t f ( i n t f [ ], i n t l, Item k ) i n t i ; f o r ( i =0; i < l ; i ++) i f ( f [ i ] == k ) r e t u r n i ; In der Kürze liegt die Würze (idkldw)? i n t I n d e x ( i n t f i e l d, i n t l e n g t h, Item key ) i n t i ; f o r ( i =0; i < l e n g t h ; i ++) i f ( f i e l d [ i ] == key ) r e t u r n i ; Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 22 / 33

21 Software-Redundanz for (i = 1; i < MAX; i++) x = func() * y + x; for (i = 1; i < MAX; i++) x = func() * y + x; for (j = 1; j < MAX; j++) x = func() * y + x; foo.c bar.c fred.c for (i = 1; i < MAX; i++) x1 = func() * y1 + x1; for (i = 1; i < MAX; i++) x2 = func() * y2 + x2; Typisch: 5 30 % des Codes sind redundant... Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 23 / 33

22 Software-Redundanz foo.c bar.c fred.c set_coordinate (&x, y); set_coordinate (&x, y); set_coordinate (&x, y); void set_coordinate ( float *x, float y) int i; for (i = 1; i < MAX; i++) *x = func() * y + *x; set_coordinate (&x1, y1); set_coordinate (&x2, y2);... und können abstrahiert werden Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 24 / 33

23 Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 25 / 33

24 Überlange Methoden Gedruckt von Rainer Koschke Mai 31, 05 7:18 b.cpp Seite 1/12 java provides a variety of conditional branch instructions, so that a number of operators merit special handling: constant operand 5 negation (we eliminate it) equality?: && and (partial evaluation) comparisons Other expressions are just evaluated and the appropriate 10 branch emitted. TODO: return a bool that is true if the statement being branched over is even needed (if statements and other places might have a constant false expression, allowing the next block of code to be skipped entirely). 15 void ByteCode::EmitBranchIfExpression(AstExpression* p, bool cond, Label& lab, AstStatement* over) p = StripNops(p); 20 assert(p > Type() == control.boolean_type); if (p > IsConstant()) if (IsZero(p)!= cond) 25 EmitBranch(OP_GOTO, lab, over); return; AstPreUnaryExpression* pre = p > PreUnaryExpressionCast(); 30 if (pre) must be! branch_if(!e,c,l) => branch_if(e,!c,l) 35 assert(pre > Tag() == AstPreUnaryExpression::NOT); EmitBranchIfExpression(pre > expression,! cond, lab, over); return; 40 AstConditionalExpression* conditional = p > ConditionalExpressionCast(); if (conditional) if (conditional > test_expression > IsConstant()) 45 branch_if(true?a:b, cond, lab) => branch_if(a, cond, lab); branch_if(false?a:b, cond, lab) => branch_if(b, cond, lab); EmitBranchIfExpression((IsZero(conditional > test_expression) 50? conditional > false_expression : conditional > true_expression), cond, lab, over); else if (IsOne(conditional > true_expression)) 55 branch_if(expr?true:true, c, l) => expr, branch if c branch_if(expr?true:false, c, l) => branch_if(expr, c, l); branch_if(expr?true:b, c, l) => branch_if(expr b, c, l); 60 if (IsOne(conditional > false_expression)) EmitExpression(conditional > test_expression, false); if (cond) 65 EmitBranch(OP_GOTO, lab, over); else if (IsZero(conditional > false_expression)) EmitBranchIfExpression(conditional > test_expression, 70 cond, lab, over); Dienstag Mai 31, /12 Gedruckt von Rainer Koschke Mai 31, 05 7:18 b.cpp Seite 3/12 EmitBranchIfExpression(conditional > test_expression, false, skip, over); EmitBranchIfExpression(conditional > true_expression, false, lab, over); 145 DefineLabel(skip); CompleteLabel(skip); else if (IsZero(conditional > false_expression)) 150 branch_if(expr?a:false, c, l) => branch_if(expr && a, c, l); if (! cond) 155 EmitBranchIfExpression(conditional > test_expression, false, lab, over); EmitBranchIfExpression(conditional > true_expression, false, lab, over); 160 else Label skip; EmitBranchIfExpression(conditional > test_expression, false, 165 skip, over); EmitBranchIfExpression(conditional > true_expression, true, lab, over); DefineLabel(skip); CompleteLabel(skip); 170 else 175 branch_if(expr?a:b, c, l) => branch_if(expr, false, lab1) branch_if(a, c, l) goto lab2 lab1: branch_if(b, c, l) 180 lab2: Label lab1, lab2; EmitBranchIfExpression(conditional > test_expression, false, lab1, over); 185 EmitBranchIfExpression(conditional > true_expression, cond, lab, over); EmitBranch(OP_GOTO, lab2, over); DefineLabel(lab1); CompleteLabel(lab1); 190 EmitBranchIfExpression(conditional > false_expression, cond, lab, over); DefineLabel(lab2); CompleteLabel(lab2); 195 return; AstInstanceofExpression* instanceof = p > InstanceofExpressionCast(); if (instanceof) 200 AstExpression* expr = StripNops(instanceof > expression); TypeSymbol* left_type = expr > Type(); TypeSymbol* right_type = instanceof > type > symbol; if (right_type > num_dimensions > 255) 205 semantic.reportsemerror(semanticerror::array_overflow, instanceof > type); if (left_type == control.null_type) 210 Dienstag Mai 31, /12 Gedruckt von Rainer Koschke Mai 31, 05 7:18 b.cpp Seite 5/12 if (left > IsConstant()) if (IsOne(left)) 285 EmitBranchIfExpression(right, cond, lab, over); else if (! cond) EmitBranch(OP_GOTO, lab, over); 290 branch_if(a&&true, cond, lab) => branch_if(a, cond, lab); branch_if(a&&false, cond, lab) => emit(a), pop; for side effects else if (right > IsConstant()) 295 if (IsOne(right)) EmitBranchIfExpression(left, cond, lab, over); else EmitExpression(left, false); 300 if (! cond) EmitBranch(OP_GOTO, lab, over); 305 branch_if(a&&b, true, lab) => branch_if(a,false,skip); branch_if(b,true,lab); skip: branch_if(a&&b, false, lab) => 310 branch_if(a,false,lab); branch_if(b,false,lab); else if (cond) 315 Label skip; EmitBranchIfExpression(left, false, skip, over); EmitBranchIfExpression(right, true, lab, over); DefineLabel(skip); CompleteLabel(skip); 320 else 325 return; EmitBranchIfExpression(left, false, lab, over); EmitBranchIfExpression(right, false, lab, over); case AstBinaryExpression::OR_OR: branch_if(false b, cond, lab) => branch_if(b, cond, lab); 330 branch_if(true b, cond, lab) => branch_if(true, cond, lab); if (left > IsConstant()) if (IsZero(left)) 335 EmitBranchIfExpression(right, cond, lab, over); else if (cond) EmitBranch(OP_GOTO, lab, over); 340 branch_if(a false, cond, lab) => branch_if(a, cond, lab); branch_if(a true, cond, lab) => emit(a), pop; for side effects else if (right > IsConstant()) 345 if (IsZero(right)) EmitBranchIfExpression(left, cond, lab, over); else EmitExpression(left, false); 350 if (cond) Dienstag Mai 31, /12 Gedruckt von Rainer Koschke Mai 31, 05 7:18 b.cpp Seite 2/12 else if (cond) EmitBranchIfExpression(conditional > test_expression, true, 75 lab, over); EmitBranchIfExpression(conditional > false_expression, true, lab, over); else 80 Label skip; EmitBranchIfExpression(conditional > test_expression, true, skip, over); EmitBranchIfExpression(conditional > false_expression, false, 85 lab, over); DefineLabel(skip); CompleteLabel(skip); 90 else if (IsZero(conditional > true_expression)) branch_if(expr?false:true, c, l) => branch_if(expr,! c, l); branch_if(expr?false:false, c, l) => expr, branch if! c 95 branch_if(expr?false:b, c, l) => branch_if(!expr && b, c, l); if (IsOne(conditional > false_expression)) EmitBranchIfExpression(conditional > test_expression, 100! cond, lab, over); else if (IsZero(conditional > false_expression)) EmitExpression(conditional > test_expression, false); 105 if (! cond) EmitBranch(OP_GOTO, lab, over); else if (! cond) 110 EmitBranchIfExpression(conditional > test_expression, true, lab, over); EmitBranchIfExpression(conditional > false_expression, false, lab, over); 115 else Label skip; EmitBranchIfExpression(conditional > test_expression, true, skip, over); 120 EmitBranchIfExpression(conditional > false_expression, true, lab, over); DefineLabel(skip); CompleteLabel(skip); 130 if (cond) EmitBranchIfExpression(conditional > test_expression, false, lab, over); 135 EmitBranchIfExpression(conditional > true_expression, true, lab, over); else 140 Label skip; 2/12 Dienstag Mai 31, 2005 Gedruckt von Rainer Koschke Mai 31, 05 7:18 b.cpp Seite 4/12 We know the result: false. But emit the left expression, in case of side effects in (expr? null : null). 215 EmitExpression(expr, false); if (! cond) EmitBranch(OP_GOTO, lab, over); else if (expr > IsConstant() a String constant 220 expr > BinaryExpressionCast()) a String concat We know the result: true, since the expression is non null and String is a final class. 225 assert(left_type == control.string()); EmitExpression(expr, false); if (cond) EmitBranch(OP_GOTO, lab, over); 230 else if ((expr > ThisExpressionCast() expr > SuperExpressionCast() expr > ClassLiteralCast() expr > ClassCreationExpressionCast() 235 expr > ArrayCreationExpressionCast()) && left_type > IsSubtype(right_type)) We know the result: true, since the expression is non null. 240 EmitExpression(expr, false); if (cond) EmitBranch(OP_GOTO, lab, over); 245 else EmitExpression(expr); PutOp(OP_INSTANCEOF); PutU2(RegisterClass(right_type)); 250 EmitBranch((cond? OP_IFNE : OP_IFEQ), lab, over); return; 255 dispose of non binary expression case by just evaluating operand and emitting appropiate test. AstBinaryExpression* bp = p > BinaryExpressionCast(); 260 if (! bp) EmitExpression(p); EmitBranch((cond? OP_IFNE : OP_IFEQ), lab, over); return; 265 Here if binary expression, so extract operands 270 AstExpression* left = StripNops(bp > left_expression); AstExpression* right = StripNops(bp > right_expression); TypeSymbol* left_type = left > Type(); TypeSymbol* right_type = right > Type(); 275 switch (bp > Tag()) case AstBinaryExpression::AND_AND: branch_if(true&&b, cond, lab) => branch_if(b, cond, lab); 280 branch_if(false&&b, cond, lab) => branch_if(false, cond, lab); 4/12 Dienstag Mai 31, 2005 Gedruckt von Rainer Koschke Mai 31, 05 7:18 b.cpp Seite 6/12 EmitBranch(OP_GOTO, lab, over); 355 branch_if(a b,true,lab) => branch_if(a,true,lab); branch_if(b,true,lab); branch_if(a b,false,lab) => branch_if(a,true,skip); 360 branch_if(b,false,lab); skip: else if (cond) 365 EmitBranchIfExpression(left, true, lab, over); EmitBranchIfExpression(right, true, lab, over); else 370 Label skip; EmitBranchIfExpression(left, true, skip, over); EmitBranchIfExpression(right, false, lab, over); DefineLabel(skip); CompleteLabel(skip); 375 return; case AstBinaryExpression::XOR: ^ on booleans is equavalent to!= assert(left_type == control.boolean_type); Fallthrough! 380 case AstBinaryExpression::EQUAL_EQUAL: case AstBinaryExpression::NOT_EQUAL: One of the operands is null. We must evaluate both operands, to get any side effects in (expr? null : null). 385 if (left_type == control.null_type right_type == control.null_type) EmitExpression(left, left_type!= control.null_type); EmitExpression(right, right_type!= control.null_type); 390 if (left_type == right_type) if (cond == (bp > Tag() == AstBinaryExpression::EQUAL_EQUAL)) EmitBranch(OP_GOTO, lab, over); 395 else if (bp > Tag() == AstBinaryExpression::EQUAL_EQUAL) 400 EmitBranch(cond? OP_IFNULL : OP_IFNONNULL, lab, over); else EmitBranch(cond? OP_IFNONNULL : OP_IFNULL, lab, over); return; 405 One of the operands is true. Branch on the other. if (left_type == control.boolean_type && 410 (IsOne(left) IsOne(right))) EmitBranchIfExpression(IsOne(left)? right : left, cond == (bp > Tag() == AstBinaryExpression:: EQUAL_EQUAL), lab, over); 415 return; Both operands are integer. 6/12 Dienstag Mai 31, 2005 Gedruckt von Rainer Koschke Mai 31, 05 7:18 b.cpp Seite 7/ if (control.issimpleintegervaluetype(left_type) left_type == control.boolean_type) assert(control.issimpleintegervaluetype(right_type) 425 right_type == control.boolean_type); if (IsZero(left) IsZero(right)) if (left_type == control.boolean_type) 430 One of the operands is false. Branch on the other. EmitBranchIfExpression(IsZero(left)? right : left, 435 cond == (bp > Tag()!= AstBinaryExpr ession::equal_equal), lab, over); else 440 One of the operands is zero. Only emit the other. EmitExpression(IsZero(left)? right : left); 445 if (bp > Tag() == AstBinaryExpression::EQUAL_EQUAL) EmitBranch((cond? OP_IFEQ : OP_IFNE), lab, over); else EmitBranch((cond? OP_IFNE : OP_IFEQ), lab, over); 450 else EmitExpression(left); EmitExpression(right); 455 if (bp > Tag() == AstBinaryExpression::EQUAL_EQUAL) EmitBranch((cond? OP_IF_ICMPEQ : OP_IF_ICMPNE), lab, over); 460 return; 465 Both operands are reference types: just do the comparison. if (IsReferenceType(left_type)) assert(isreferencetype(right_type)); 470 EmitExpression(left); EmitExpression(right); if (bp > Tag() == AstBinaryExpression::EQUAL_EQUAL) EmitBranch((cond? OP_IF_ACMPEQ : OP_IF_ACMPNE), lab, over); 475 else EmitBranch((cond? OP_IF_ACMPNE : OP_IF_ACMPEQ), lab, over); return; 480 case AstBinaryExpression::IOR: One argument is false. Branch on other. 485 if (IsZero(left) IsZero(right)) EmitBranchIfExpression(IsZero(left)? right : left, cond, lab, over); Dienstag Mai 31, /12 Gedruckt von Rainer Koschke Mai 31, 05 7:18 b.cpp Seite 9/12 assert(left_type!= control.boolean_type); 560 if (control.issimpleintegervaluetype(left_type)) we have already dealt with EQUAL_EQUAL and NOT_EQUAL for the case of two integers, but still need to look for comparisons for which 565 one operand may be zero. if (IsZero(left)) EmitExpression(right); 570 switch (bp > Tag()) op_true = OP_IFGT; 575 op_false = OP_IFLE; case AstBinaryExpression::LESS_EQUAL: if (0 <= x) same as if (x >= 0) op_true = OP_IFGE; 580 op_false = OP_IFLT; case AstBinaryExpression::GREATER: if (0 > x) same as if (x < 0) op_true = OP_IFLT; 585 op_false = OP_IFGE; case AstBinaryExpression::GREATER_EQUAL: if (0 >= x) same as if (x <= 0) op_true = OP_IFLE; 590 op_false = OP_IFGT; default: assert(false); 595 else if (IsZero(right)) EmitExpression(left); 600 switch (bp > Tag()) case AstBinaryExpression::LESS: op_true = OP_IFLT; 605 op_false = OP_IFGE; case AstBinaryExpression::LESS_EQUAL: op_true = OP_IFLE; op_false = OP_IFGT; 610 case AstBinaryExpression::GREATER: op_true = OP_IFGT; op_false = OP_IFLE; 615 case AstBinaryExpression::GREATER_EQUAL: op_true = OP_IFGE; op_false = OP_IFLT; default: 620 assert(false); else 625 EmitExpression(left); EmitExpression(right); Dienstag Mai 31, /12 Gedruckt von Rainer Koschke Mai 31, 05 7:18 b.cpp Seite 11/12 switch (bp > Tag()) 700 case AstBinaryExpression::EQUAL_EQUAL: opcode = OP_FCMPL; op_true = OP_IFEQ; op_false = OP_IFNE; 705 case AstBinaryExpression::NOT_EQUAL: opcode = OP_FCMPL; op_true = OP_IFNE; op_false = OP_IFEQ; 710 case AstBinaryExpression::LESS: opcode = OP_FCMPG; op_true = OP_IFLT; op_false = OP_IFGE; 715 case AstBinaryExpression::LESS_EQUAL: opcode = OP_FCMPG; op_true = OP_IFLE; op_false = OP_IFGT; 720 case AstBinaryExpression::GREATER: opcode = OP_FCMPL; op_true = OP_IFGT; op_false = OP_IFLE; 725 case AstBinaryExpression::GREATER_EQUAL: opcode = OP_FCMPL; op_true = OP_IFGE; op_false = OP_IFLT; 730 default: assert(false); 735 else if (left_type == control.double_type) EmitExpression(left); EmitExpression(right); 740 switch (bp > Tag()) case AstBinaryExpression::EQUAL_EQUAL: opcode = OP_DCMPL; op_true = OP_IFEQ; 745 op_false = OP_IFNE; case AstBinaryExpression::NOT_EQUAL: opcode = OP_DCMPL; op_true = OP_IFNE; 750 op_false = OP_IFEQ; case AstBinaryExpression::LESS: opcode = OP_DCMPG; op_true = OP_IFLT; 755 op_false = OP_IFGE; case AstBinaryExpression::LESS_EQUAL: opcode = OP_DCMPG; op_true = OP_IFLE; 760 op_false = OP_IFGT; case AstBinaryExpression::GREATER: opcode = OP_DCMPL; op_true = OP_IFGT; 765 op_false = OP_IFLE; case AstBinaryExpression::GREATER_EQUAL: opcode = OP_DCMPL; Dienstag Mai 31, /12 Gedruckt von Rainer Koschke Mai 31, 05 7:18 b.cpp Seite 8/12 return; 490 One argument is true. Emit the other, and result is true. 495 if (IsOne(left) IsOne(right)) EmitExpression(IsOne(left)? right : left, false); if (cond) EmitBranch(OP_GOTO, lab, over); 500 return; case AstBinaryExpression::AND: 505 One argument is true. Branch on other. if (IsOne(left) IsOne(right)) EmitBranchIfExpression(IsOne(left)? right : left, 510 cond, lab, over); return; 515 One argument is false. Emit the other, and result is false. if (IsZero(left) IsZero(right)) EmitExpression(IsZero(left)? right : left, false); 520 if (! cond) EmitBranch(OP_GOTO, lab, over); return; 525 default: 530 here if not comparison, comparison for non integral numeric types, or integral comparison for which no special casing needed. Begin by dealing with non comparisons switch (bp > Tag()) 535 case AstBinaryExpression::LESS: case AstBinaryExpression::LESS_EQUAL: case AstBinaryExpression::GREATER: case AstBinaryExpression::GREATER_EQUAL: 540 case AstBinaryExpression::EQUAL_EQUAL: case AstBinaryExpression::NOT_EQUAL: break to continue comparison processing default: 545 not a comparison, get the (necessarily boolean) value of the expression and branch on the result EmitExpression(p); EmitBranch(cond? OP_IFNE : OP_IFEQ, lab, over); 550 return; 555 Opcode opcode = OP_NOP, op_true, op_false; 8/12 Dienstag Mai 31, 2005 Gedruckt von Rainer Koschke Mai 31, 05 7:18 b.cpp Seite 10/12 switch (bp > Tag()) 630 case AstBinaryExpression::LESS: op_true = OP_IF_ICMPLT; op_false = OP_IF_ICMPGE; 635 case AstBinaryExpression::LESS_EQUAL: op_true = OP_IF_ICMPLE; op_false = OP_IF_ICMPGT; case AstBinaryExpression::GREATER: 640 op_true = OP_IF_ICMPGT; op_false = OP_IF_ICMPLE; case AstBinaryExpression::GREATER_EQUAL: op_true = OP_IF_ICMPGE; 645 op_false = OP_IF_ICMPLT; default: assert(false); 650 else if (left_type == control.long_type) 655 EmitExpression(left); EmitExpression(right); opcode = OP_LCMP; 660 branch according to result value on stack switch (bp > Tag()) 665 case AstBinaryExpression::EQUAL_EQUAL: op_true = OP_IFEQ; op_false = OP_IFNE; case AstBinaryExpression::NOT_EQUAL: 670 op_true = OP_IFNE; op_false = OP_IFEQ; case AstBinaryExpression::LESS: op_true = OP_IFLT; 675 op_false = OP_IFGE; case AstBinaryExpression::LESS_EQUAL: op_true = OP_IFLE; op_false = OP_IFGT; 680 case AstBinaryExpression::GREATER: op_true = OP_IFGT; op_false = OP_IFLE; 685 case AstBinaryExpression::GREATER_EQUAL: op_true = OP_IFGE; op_false = OP_IFLT; default: 690 assert(false); else if (left_type == control.float_type) 695 EmitExpression(left); EmitExpression(right); 10/12 Dienstag Mai 31, 2005 Gedruckt von Rainer Koschke Mai 31, 05 7:18 b.cpp Seite 12/12 op_true = OP_IFGE; 770 op_false = OP_IFLT; default: assert(false); 775 else assert(false && "comparison of unsupported type"); if (opcode!= OP_NOP) 780 PutOp(opcode); if need to emit comparison before branch EmitBranch (cond? op_true : op_false, lab, over); 12/12 Dienstag Mai 31, else if (IsOne(conditional > false_expression)) branch_if(expr?a:true, c, l) => branch_if(!expr a, c, l); else EmitBranch((cond? OP_IF_ICMPNE : OP_IF_ICMPEQ), lab, over); case AstBinaryExpression::LESS: if (0 < x) same as if (x > 0) Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 26 / 33

25 Ignoranz, Not-Invented-Here-Syndrom oder die neuerfundenen Räder p u b l i c c l a s s A r t i c l e s p r i v a t e A r t i c l e item ; p r i v a t e A r t i c l e s n e x t ; p u b l i c A r t i c l e s ( )... p u b l i c v o i d Add ( A r t i c l e a r t )... p u b l i c v o i d Show ( )... p u b l i c c l a s s A r t i c l e s p r i v a t e j a v a. u t i l. L i n k e d L i s t a r t i c l e s ; p u b l i c A r t i c l e s ( )... p u b l i c v o i d Add ( A r t i c l e a r t )... p u b l i c v o i d Show ( )... Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 27 / 33

26 Die Oglala des 21. Jahrhunderts p u b l i c c l a s s A r t i c l e s p r i v a t e j a v a. u t i l. L i n k e d L i s t a r t i c l e s ; p u b l i c A r t i c l e s ( )... p u b l i c v o i d Add ( A r t i c l e a r t ) a r t i c l e s. addlast ( a r t ) ; p u b l i c v o i d Show ( ) L i s t I t e r a t o r l i s t I t r = a r t i c l e s. l i s t I t e r a t o r ( ) ; w h i l e ( l i s t I t r. hasnext ( ) ) A r t i c l e a r t = ( A r t i c l e ) l i s t I t r. n e x t ( ) ; a r t. show ( ) ; Oglala (bedeutet: Die ihre Habe verschleudern im Sinne von Großzügigkeit) sind ein Stamm der Lakota-Sioux-Indianer. Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 28 / 33

27 Prinzipien einheitlich so einfach wie möglich sprechend, direkt verständlich prägnant frei von Redundanz übersichtlich strukturiert abgeschlossen abstrakt Separation of Concerns Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 29 / 33

28 Was alles in den Code-Inspektionen 2004/05 auffiel Verwendung von verketteten Listen, wo Maps angebracht wären; manuelle der entsprechenden Map-Zugriffe Verwendung von verketteten Listen, wo ArrayList angebrachter wäre; z.b. Iterieren durch die LinkedList über Indexzugriffe alle Methoden einer Klasse static; die statischen Variablen werden über den Konstruktor initialisiert alle Methoden einer Klasse static, die Instanz, auf der die Methoden arbeiten, werden z.b. als LinkedList jeweils übergeben Neuimplementierung von Sortieralgorithmen die gesamte GUI wird in einer einzigen Klasse implementiert Datenbankzugriffe werden über alle Klassen verteilt, statt gekapselt Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 30 / 33

29 Was alles in den Code-Inspektionen 2004/05 auffiel Query wird mit select * gemacht, danach werden manuell die benötigten Spalten rausgefiltert Datenbanknamen usw. werden hartcodiert manuelle von Parsern für verschiedene Zwecke (wo z.b. XML oder Properties-Datei angebracht wäre) mehrfache der gleichen Hilfsklassen von verschiedenen Leuten, z.b. Übersetzungen (dementsprechend auch mit verschiedenen Dateiformaten) keine Berücksichtigung von Performance (z.b. bei Operationen auf verketteter Liste, Dateioperationen; Konfigurationsdatei wird bei jedem Methodenaufruf neu eingelesen) Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 31 / 33

30 Wiederholungsfragen Was sind Refactorings und Bad Smells? Wie wird Refactoring durchgeführt? Nennen Sie Beispiele für Bad Smells. Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 32 / 33

31 Murphy u. a Murphy, Gail C. ; Notkin, David ; Sullivan, Kevin: Software Reflexion Models: Bridging the Gap Between Source and High-Level Models. In: Proc. of the Third ACM SIGSOFT Symposium on the Foundations of Software Engineering, 1995, S Murphy u. a Murphy, Gail C. ; Notkin, David ; Sullivan, Kevin J.: Software Reflexion Models: Bridging the Gap between Design and Implementation. In: IEEE Transactions on Software Engineering 27 (2001), April, Nr. 4, S Object Management Group 2003 Object Management Group: OMG Unified Modeling Language Specification. March Version 1.5 Sun microsystems 1999 Sun microsystems: Code Conventions for the Java TM Programming Language. April URL http: java.sun.com/docs/codeconv/html/codeconvtoc.doc.html Rainer Koschke (Uni Bremen) Software-Projekt Wintersemester 2008/09 33 / 33

Software-Projekt. Prof. Dr. Rainer Koschke. Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen

Software-Projekt. Prof. Dr. Rainer Koschke. Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen Software-Projekt Prof. Dr. Rainer Koschke Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen Wintersemester 2008/09 Überblick I 1 1 Motivation Architekturkonformität

Mehr

Software-Projekt. Prof. Dr. Rainer Koschke. Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen

Software-Projekt. Prof. Dr. Rainer Koschke. Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen Software-Projekt Prof. Dr. Rainer Koschke Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen Wintersemester 2006/07 Überblick I 1 1 Motivation Architekturkonformität

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2008/09 Überblick I 1 Klonerkennung Techniken

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2008/09 Überblick I 1 Klonerkennung 1 Klonerkennung

Mehr

D-BAUG Informatik I. Exercise session: week 1 HS 2018

D-BAUG Informatik I. Exercise session: week 1 HS 2018 1 D-BAUG Informatik I Exercise session: week 1 HS 2018 Java Tutorials 2 Questions? expert.ethz.ch 3 Common questions and issues. expert.ethz.ch 4 Need help with expert? Mixed expressions Type Conversions

Mehr

Zusammenfassung der Testarten

Zusammenfassung der Testarten oftware-test Zusammenfassung der Testarten Komponententest Integrationstest Systemtest Grenztest Black Box Test zustands basierter Test White Box Test Pfadtest Strategie: Urknall Top Down Bottom Up Sandwich

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der

Mehr

Algebraische Spezifikation von Software und Hardware II

Algebraische Spezifikation von Software und Hardware II Algebraische Spezifikation von Software und Hardware II Markus Roggenbach Mai 2008 3. Signaturen 3. Signaturen 2 Grundlegende Frage Wie lassen sich Interfaces beschreiben? Signaturen = Sammlung aller bekannten

Mehr

Konsolidierung von Software-Varianten in Software-Produktlinien ein Forschungsprogramm

Konsolidierung von Software-Varianten in Software-Produktlinien ein Forschungsprogramm Konsolidierung von Software-Varianten in Software-Produktlinien ein Forschungsprogramm Rainer Koschke Universität Bremen Workshop Software-Reengineering Bad Honnef 5. Mai 2005 Bauhaus Forschungskooperation

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 4. November 2015 Administratives Zur Abgabe von Übungsaufgaben Nein, wir

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte

Mehr

Informatik - Übungsstunde

Informatik - Übungsstunde Informatik - Übungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zürich Woche 08-25.04.2018 Lernziele const: Reference const: Pointer vector: iterator using Jonas Lauener (ETH Zürich) Informatik

Mehr

Pascal Schärli

Pascal Schärli Informatik I - Übung 8 Pascal Schärli pascscha@student.ethz.ch 12.04.2019 1 Was gibts heute? Best-Of Vorlesung: Prefix / Infix EBNF Vorbesprechung Problem of the Week 2 Vorlesung 3. 1 Prefix Notation Infix

Mehr

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016 to to May 2016 to What is Programming? All computers are stupid. All computers are deterministic. You have to tell the computer what to do. You can tell the computer in any (programming) language) you

Mehr

Klasse Label. class Label { Code code; List<Integer> fixuplist; // code positions to patch int adr; // address of label in code

Klasse Label. class Label { Code code; List<Integer> fixuplist; // code positions to patch int adr; // address of label in code Klasse Label class Label { Code code; List fixuplist; // code positions to patch int adr; // address of label in code // inserts offset to label at current void put (); // defines label to be

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Grundlagen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White

Mehr

Aufgabe 1.1. Wählen Sie jene Variablendeklarationen mit Initialisierungen aus, die in Java hinsichtlich der Typen korrekt sind:

Aufgabe 1.1. Wählen Sie jene Variablendeklarationen mit Initialisierungen aus, die in Java hinsichtlich der Typen korrekt sind: Test 1 in Programmkonstruktion 59 / 100 Punkte 1. Multiple-Choice-Aufgaben 20 / 30 Punkte Bitte wählen Sie alle zutreffenden Antwortmöglichkeiten aus. Es können beliebig viele Antwortmöglichkeiten zutreffen,

Mehr

Programmiermethodik 1. Klausur

Programmiermethodik 1. Klausur Programmiermethodik 1. Klausur 27. 6. 2013 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 21 2 20 3 19 4 19 5 21 6 20 Gesamt 120 1 Seite 2 von 18 Aufgabe 1) Objekt-Orientierung und Vererbung

Mehr

Informatik für Mathematiker und Physiker Woche 2. David Sommer

Informatik für Mathematiker und Physiker Woche 2. David Sommer Informatik für Mathematiker und Physiker Woche 2 David Sommer David Sommer 25. September 2018 1 Heute: 1. Self-Assessment 2. Feedback C++ Tutorial 3. Modulo Operator 4. Exercise: Last Three Digits 5. Binary

Mehr

Softwaretechnik WS 16/17. Übungsblatt 01

Softwaretechnik WS 16/17. Übungsblatt 01 Softwaretechnik WS 16/17 Übungsblatt 01 Was ist eine Klasse? Definition der Object Management Group: A class describes a set of objects that share the same specifications of features, constraints, and

Mehr

Info B VL 11: Innere Klassen/Collections

Info B VL 11: Innere Klassen/Collections Info B VL 11: Innere Klassen/Collections Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 11: Innere Klassen/Collections

Mehr

Informatik - Übungsstunde

Informatik - Übungsstunde Informatik - Übungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zürich Woche 12-23.05.2018 Lernziele Klassen Dynamic Memory Jonas Lauener (ETH Zürich) Informatik - Übung Woche 12 2 / 20 Structs

Mehr

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Java Tools JDK. IDEs.  Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation Java Tools JDK http://www.oracle.com/technetwork/java/javase/ Downloads IDEs Java SE 8 Java SE 8 Documentation Eclipse http://www.eclipse.org IntelliJ http://www.jetbrains.com/idea/ NetBeans https://netbeans.org/

Mehr

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter Fallstudie: Arithmetische Ausdrücke AG Softech FB Informatik TU Kaiserslautern Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Magic Figures. We note that in the example magic square the numbers 1 9 are used. All three rows (columns) have equal sum, called the magic number.

Magic Figures. We note that in the example magic square the numbers 1 9 are used. All three rows (columns) have equal sum, called the magic number. Magic Figures Introduction: This lesson builds on ideas from Magic Squares. Students are introduced to a wider collection of Magic Figures and consider constraints on the Magic Number associated with such

Mehr

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen. Innere Klassen Innere Klassen Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen. Literatur: Java Tutorial & Arnold, K., Gosling, J. und Holmes,D... Page 1 Innere Klassen Der erste

Mehr

Problem: Keine Integers in JavaCard. ToDo: Rechnen mit Bytes und Shorts

Problem: Keine Integers in JavaCard. ToDo: Rechnen mit Bytes und Shorts Kapitel 6: Arithmetik in JavaCard Problem: Keine Integers in JavaCard ToDo: Rechnen mit Bytes und Shorts Java SmartCards, Kap. 6 (1/20) Hex-Notation 1 Byte = 8 Bit, b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 0101

Mehr

Theorie zu Übung 8 Implementierung in Java

Theorie zu Übung 8 Implementierung in Java Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept

Mehr

Übungen zu Programmieren - Code-Formatierung -

Übungen zu Programmieren - Code-Formatierung - - Code-Formatierung - Tutoren: Sven Groppe Florian Frischat David Gregorczyk Dana Linnepe Sven-Erik Pfeiffer Markus Weigel Simon Werner groppe@ifis.uni-luebeck.de prog2@ifis.uni-luebeck.de prog6@ifis.uni-luebeck.de

Mehr

EINFÜHRUNG IN DIE PROGRAMMIERUNG

EINFÜHRUNG IN DIE PROGRAMMIERUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG GRUNDLAGEN Tobias Witt!! 24.03.2014 ORGANISATORISCHES 09:00-10:30! Täglich Übungen zur Vertiefung! Laptop hier nicht erforderlich! Linux, OS X! Freitag: http://hhu-fscs.de/linux-install-party/

Mehr

Abstrakte C-Maschine und Stack

Abstrakte C-Maschine und Stack Abstrakte C-Maschine und Stack Julian Tobergte Proseminar C- Grundlagen und Konzepte, 2013 2013-06-21 1 / 25 Gliederung 1 Abstrakte Maschine 2 Stack 3 in C 4 Optional 5 Zusammenfassung 6 Quellen 2 / 25

Mehr

Übersetzen des Quelltexts in ausführbaren Maschinen-Code Translation of source code into executable machine code

Übersetzen des Quelltexts in ausführbaren Maschinen-Code Translation of source code into executable machine code Informatik II D-BAUG Self-Assessment, 2. März 2017 Lösung Name, Vorname:............................................................. Legi-Nummer:.............................................................

Mehr

Informatik II Übung 7 Gruppe 7

Informatik II Übung 7 Gruppe 7 Informatik II Übung 7 Gruppe 7 Leyna Sadamori leyna.sadamori@inf.ethz.ch Informatik II Übung 7 Leyna Sadamori 10. April 2014 1 Administratives Nächste Übung fällt leider aus! Bitte eine andere Übung besuchen.

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren 3. Kontrollstrukturen 09.11.2016 Jun.-Prof. Dr.-Ing. Anne Koziolek Version 1.1 ARBEITSGRUPPE ARCHITECTURE-DRIVEN REQUIREMENTS ENGINEERING (ARE) INSTITUT FÜR PROGRAMMSTRUKTUREN UND

Mehr

Informatik für Mathematiker und Physiker Woche 7. David Sommer

Informatik für Mathematiker und Physiker Woche 7. David Sommer Informatik für Mathematiker und Physiker Woche 7 David Sommer David Sommer 30. Oktober 2018 1 Heute: 1. Repetition Floats 2. References 3. Vectors 4. Characters David Sommer 30. Oktober 2018 2 Übungen

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Fallstudie: Arithmetische Ausdrücke Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick

Mehr

Assembler (NASM) Crashkurs von Sönke Schmidt

Assembler (NASM) Crashkurs von Sönke Schmidt Sönke Schmidt (NASM) Crashkurs von Sönke Schmidt Berlin, 4.11.2015 Meine Webseite: http://www.soenke-berlin.de NASM Was ist das? nach Wikipedia: Ein ist ein Programmierwerkzeug, das ein in maschinennaher

Mehr

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2018

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2018 to to May 2018 to What is Programming? All computers are stupid. All computers are deterministic. You have to tell the computer what to do. You can tell the computer in any (programming) language) you

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren 3. Kontrollstrukturen 04.11.2015 Prof. Dr. Ralf H. Reussner Version 1.1 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD),

Mehr

Algorithmen und Datenstrukturen Musterlösung 5

Algorithmen und Datenstrukturen Musterlösung 5 Algorithmen und Datenstrukturen Musterlösung 5 Martin Avanzini Thomas Bauereiß Herbert Jordan René Thiemann

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Programmier-Befehle - Woche 10

Programmier-Befehle - Woche 10 Funktionen Rekursion Selbstaufruf einer Funktion Jeder rekursive Funktionsaufruf hat seine eigenen, unabhängigen Variablen und Argumente. Dies kann man sich sehr gut anhand des in der Vorlesung gezeigten

Mehr

Übungsblatt 10. Thema: Abstrakte Datentypen, Datenstrukturen in Java

Übungsblatt 10. Thema: Abstrakte Datentypen, Datenstrukturen in Java Informatik I WS 05/06 Prof. Dr. W. May Dipl.-Inform. Oliver Fritzen Dipl.-Inform. Christian Kubczak Übungsblatt 10 Ausgegeben am: Abgabe bis: 13.01.2006 24.1.2006 (Theorie) 27.1.2006 (Praktisch) Thema:

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 15 Einstieg in die Informatik mit Java Collections Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 15 1 Überblick Collections 2 Hierarchie von Collections 3 Verwendung

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen Auswertung von Ausdrücken Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt.

Mehr

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) 1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.3. Anweisungen und Kontrollstrukturen - 1 - Anweisung Anweisung Zuweisung Methodenaufruf

Mehr

Informatik II - Tutorium 5

Informatik II - Tutorium 5 Informatik II - Tutorium 5 Vincent Becker vincent.becker@inf.ethz.ch 28.03.2018 Vincent Becker 28.03.2018 1 Neue Webseite Vincent Becker 28.03.2018 3 Allgemeines Java-Konvention: Alle Variablen- und Methodennamen

Mehr

Bayesian Networks. Syntax Semantics Parametrized Distributions Inference in Bayesian Networks. Exact Inference. Approximate Inference

Bayesian Networks. Syntax Semantics Parametrized Distributions Inference in Bayesian Networks. Exact Inference. Approximate Inference Syntax Semantics Parametrized Distributions Inference in Exact Inference Approximate Inference enumeration variable elimination stochastic simulation Markov Chain Monte Carlo (MCMC) 1 Includes many slides

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse

Mehr

Objektorientierung III

Objektorientierung III Lehrstuhl für Bioinformatik Einführung in die Programmierung für Bioinformatiker Prof. B. Rost, Dr. L. Richter Blatt 10 9.1.2017 Objektorientierung III Aufgabe 10.1. Wir sind doch alle gleich In der Vorlesung

Mehr

Java-Schulung Grundlagen

Java-Schulung Grundlagen Java-Schulung Grundlagen Java 2 Standard Edition JDK 5 / 6 31.05.2008 Marcel Wieczorek 1 Themenübersicht Basiswissen Objektorientierung Datentypen Fehlerbehandlung Sonstiges Einführung Klassen, Strings

Mehr

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen Teil 5 - Java Programmstruktur Operatoren Schlüsselwörter Datentypen 1 Kommentare in Java In Java gibt es drei Möglichkeiten zur Kommentierung: // Kommentar Alle Zeichen nach dem // werden ignoriert. für

Mehr

Algorithmen zur Datenanalyse in C++

Algorithmen zur Datenanalyse in C++ Algorithmen zur Datenanalyse in C++ Hartmut Stadie 16.04.2012 Algorithmen zur Datenanalyse in C++ Hartmut Stadie 1/ 39 Einführung Datentypen Operatoren Anweisungssyntax Algorithmen zur Datenanalyse in

Mehr

Tutoraufgabe 1 (Implementierung eines ADTs):

Tutoraufgabe 1 (Implementierung eines ADTs): Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS Tutoriumslösung - Übung (Abgabe.05.0) F. Corzilius, S. Schupp, T. Ströder Tutoraufgabe (Implementierung eines ADTs): Wir spezifizieren den ADT

Mehr

Informatik II Übung 5

Informatik II Übung 5 Informatik II Übung 5 Florian Scheidegger florsche@student.ethz.ch Folien mit freundlicher Genehmigung adaptiert von Gábor Sörös und Simon Mayer gabor.soros@inf.ethz.ch, simon.mayer@inf.ethz.ch 27.03.2013

Mehr

Übung Informatik I - Programmierung - Blatt 8

Übung Informatik I - Programmierung - Blatt 8 RHEINISCH- WESTFÄLISCHE TECHNISCHE HOCHSCHULE AACHEN LEHR- UND FORSCHUNGSGEBIET INFORMATIK II RWTH Aachen D-52056 Aachen GERMANY http://programmierung.informatik.rwth-aachen.de LuFG Informatik II Prof.

Mehr

Informatik II Übung 5 Gruppe 3

Informatik II Übung 5 Gruppe 3 Informatik II Übung 5 Gruppe 3 Leyna Sadamori leyna.sadamori@inf.ethz.ch Informatik II Übung 5 Leyna Sadamori 29. März 2017 1 Administrativ Die Übung am 5. April fällt aus! Bitte in die Übung in HG G 3

Mehr

Ausnahmen-Behandlung

Ausnahmen-Behandlung Wintersemester 2008/2009 1 try..except..else 2 try..finally 3 raise 4 assert Ausnahmen in Python Trennung von funktionalem Code und Fehlerbehandlung. Gute Sprachintegration Einfache Verwendbarkeit Ähnlich

Mehr

Prüfung Informatik D-MATH/D-PHYS :00 11:00

Prüfung Informatik D-MATH/D-PHYS :00 11:00 Prüfung Informatik D-MATH/D-PHYS 25. 1. 2013 09:00 11:00 Dr. Bernd Gartner Kandidat/in: Name:... Vorname:... Stud.-Nr.:... Ich bezeuge mit meiner Unterschrift, dass ich die Prufung unter regularen Bedingungen

Mehr

C++11. neu in C++11: range-based for. Objektorientierte Programmierung mit C++ Ersetzung durch: 1. Elementares C++ int array[] = { 1, 2, 3, 4, 5 };

C++11. neu in C++11: range-based for. Objektorientierte Programmierung mit C++ Ersetzung durch: 1. Elementares C++ int array[] = { 1, 2, 3, 4, 5 }; neu in C++11: range-based for int array[] = { 1, 2, 3, 4, 5 ; for (int x : array) // value x *= 2; C++11 for (int& x : array) // reference x *= 2; Ersetzung durch: { auto && range = range-init; for ( auto

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2007/08 Überblick I 1 Refactoring Refactorings

Mehr

Übungsstunde 10. Einführung in die Programmierung I

Übungsstunde 10. Einführung in die Programmierung I Übungsstunde 10 Einführung in die Programmierung I Probleme bei Übung 9 [TODO Assistent] Nachbesprechung Übung 10 Aufgabe 1 Comparable boolean lessthan(comparable other) Ziel: Schreiben von Methoden,

Mehr

Struktur des MicroJava-Compilers

Struktur des MicroJava-Compilers Struktur des MicroJava-Compilers Compiler Parser.mj Scanner Code- Generator.obj Symboltabelle UE zu Übersetzerbau Lexikalische Analyse 1 Grammatik ohne Scanner Expr = Term { "+" Term }. Term = Factor {

Mehr

! können default arguments haben: ein Endstück der Argumentliste einer Deklaration mit Wertevorgaben

! können default arguments haben: ein Endstück der Argumentliste einer Deklaration mit Wertevorgaben 1.4. Funktionen können default arguments haben: ein Endstück der Argumentliste einer Deklaration mit Wertevorgaben int atoi (const char* string, int base = 10); // ascii to int on radix base atoi ("110");

Mehr

Grundlagen der Programmierung in C++ Kontrollstrukturen

Grundlagen der Programmierung in C++ Kontrollstrukturen Block Keine Kontrollstruktur im eigentlichen Sinn Grundlagen der Programmierung in C++ Kontrollstrukturen Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Dient

Mehr

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? weit verbreitet einfach und (relativ) sicher keine Pointer (?) keine gotos kein Präprozessor keine globalen Variablen garbage collection objekt-orientiert

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Klassenattribute und -methoden Bieniusa Software Entwicklung 1 2/ 23 Beispiel: Klassenattribute I class Uebungsgruppe

Mehr

Weather forecast in Accra

Weather forecast in Accra Weather forecast in Accra Thursday Friday Saturday Sunday 30 C 31 C 29 C 28 C f = 9 5 c + 32 Temperature in Fahrenheit Temperature in Celsius 2 Converting Celsius to Fahrenheit f = 9 5 c + 32 tempc = 21

Mehr

Algorithm Theory 3 Fast Fourier Transformation Christian Schindelhauer

Algorithm Theory 3 Fast Fourier Transformation Christian Schindelhauer Algorithm Theory 3 Fast Fourier Transformation Institut für Informatik Wintersemester 2007/08 Chapter 3 Fast Fourier Transformation 2 Polynomials Polynomials p over real numbers with a variable x p(x)

Mehr

Programmiermethodik 3. Klausur Lösung

Programmiermethodik 3. Klausur Lösung Programmiermethodik 3. Klausur Lösung 9. 1. 2014 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 20 2 16 3 45 4 19 5 20 Gesamt 120 1 Seite 2 von 10 Aufgabe 1) Objekt-Orientierung und Vererbung

Mehr

Nachtragstest in Programmkonstruktion 1. Phase. 1. Multiple-Choice-Aufgaben

Nachtragstest in Programmkonstruktion 1. Phase. 1. Multiple-Choice-Aufgaben Nachtragstest in Programmkonstruktion 1. Phase 29.5 / 60 Punkte 1. Multiple-Choice-Aufgaben 14.5 / 24 Punkte Bitte wählen Sie alle zutreffenden Antwortmöglichkeiten aus. Es können beliebig viele Antwortmöglichkeiten

Mehr

Distributed Computing Group

Distributed Computing Group JAVA TUTORIAL Distributed Computing Group Vernetzte Systeme - SS 06 Übersicht Warum Java? Interoperabilität grosse und gut dokumentierte Library weit verbreitet Syntax sehr nahe an C Erfahrung: Java wird

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1 Kapitel 13 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1 Kapitel 12 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

Programmier-Befehle - Woche 08

Programmier-Befehle - Woche 08 Datentypen Vektoren (mehrdim.) eines bestimmten Typs Erfordert: #include Wichtige Befehle: Definition: std::vector my vec (n rows, std::vector(n cols, init value)) Zugriff:

Mehr

2.2 Spezifikation abstrakter Datentypen. 2.3 Implementierung und Anwendung von ADT. 2.4 Datenabstraktion und Objektorientierung

2.2 Spezifikation abstrakter Datentypen. 2.3 Implementierung und Anwendung von ADT. 2.4 Datenabstraktion und Objektorientierung Inhaltsverzeichnis (update) 2 Datenabstraktion 2.1 Begriffe 2.2 Spezifikation abstrakter Datentypen 2.2.1 Algebraische Spezifikation 2.2.2 Modellierende Spezifikation 2.3 Implementierung und Anwendung

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 04: Collection API Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2017 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 27 Inhalt

Mehr

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz Patrick Schulz patrick.schulz@paec-media.de 29.04.2013 1 Einführung Einführung 2 3 4 Quellen 1 Einführung Einführung 2 3 4 Quellen Hello World in Java Einführung 1 public class hello_ world 2 { 3 public

Mehr

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? zunehmend weit verbreitet einfach und (relativ) sicher keine Adressrechnung, aber Pointer keine gotos kein Präprozessor keine globalen Variablen garbage

Mehr

EINFÜHRUNG IN DIE PROGRAMMIERUNG

EINFÜHRUNG IN DIE PROGRAMMIERUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG GRUNDLAGEN Tobias Witt 24.03.2014 ORGANISATORISCHES tobias.witt@hhu.de 10:30-12:00 Täglich Übungen zur Vertiefung Laptop hier nicht erforderlich Aber später in den Übungen!

Mehr

Datenstrukturen. Ziele

Datenstrukturen. Ziele Datenstrukturen Ziele Nutzen von Datenstrukturen Funktionsweise verstehen Eigenen Datenstrukturen bauen Vordefinierte Datenstrukturen kennen Hiflsmethoden komplexer Datenstrukten kennen Datenstrukturen

Mehr

PROGRAMMIERUNG IN JAVA

PROGRAMMIERUNG IN JAVA PROGRAMMIERUNG IN JAVA ZUWEISUNGEN (1) Deklaration nennt man die Ankündigung eines Platzhalters (Variablen) und Initialisierung die erste Wertvergabe bzw. die konkrete Erstellung des Platzhalters. In einem

Mehr

16. Ausnahmebehandlung Programmieren / Algorithmen und Datenstrukturen 2

16. Ausnahmebehandlung Programmieren / Algorithmen und Datenstrukturen 2 16. Ausnahmebehandlung Programmieren / Algorithmen und Datenstrukturen 2 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt Wintersemester 2012 / 2013 1 Agenda Kontrollfragen Motivation Fehlerbehandlung

Mehr

Die Syntax von Java. Ursprünge. Konsequenzen. Das Wichtigste in Kürze. Weiteres Vorgehen. Rund um Java. Sun Microsystems. Borland Software Corp

Die Syntax von Java. Ursprünge. Konsequenzen. Das Wichtigste in Kürze. Weiteres Vorgehen. Rund um Java. Sun Microsystems. Borland Software Corp Ursprünge Die Syntax von Java Borland Software Corp 1995 Syntax: Pascal Objektorientierte Prorammierung optional Plattformen: Windows (Linux, Mac OS X) Sun Microsystems 1995 Syntax: C/C++ Objektorientiert

Mehr

Collections und Generics

Collections und Generics Collections und Generics Proseminar Objektorientiertes Programmieren mit.net und C# Nadim Yonis Institut für Informatik Software & Systems Engineering Agenda Collections Standard Collections Comparer Generics

Mehr

16. Dynamische Datenstrukturen

16. Dynamische Datenstrukturen Datenstrukturen 6. Dynamische Datenstrukturen Eine Datenstruktur organisiert Daten so in einem Computer, dass man sie effizient nutzen kann. Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange

Mehr

Mul$media im Netz (Online Mul$media) Wintersemester 2014/15. Übung 02 (Nebenfach)

Mul$media im Netz (Online Mul$media) Wintersemester 2014/15. Übung 02 (Nebenfach) Mul$media im Netz (Online Mul$media) Wintersemester 2014/15 Übung 02 (Nebenfach) Mul=media im Netz WS 2014/15 - Übung 2-1 Organiza$on: Language Mul=ple requests for English Slides Tutorial s=ll held in

Mehr

Ursprünge. Die Syntax von Java. Das Wichtigste in Kürze. Konsequenzen. Weiteres Vorgehen. Rund um Java

Ursprünge. Die Syntax von Java. Das Wichtigste in Kürze. Konsequenzen. Weiteres Vorgehen. Rund um Java Ursprünge Die Syntax von Java Borland Software Corp 1995 Syntax: Pascal Objektorientierte Prorammierung optional Plattformen: Windows (Linux, Mac OS X) Sun Microsystems 1995 Syntax: C/C++ Objektorientiert

Mehr

Programmieren 2 Java Überblick

Programmieren 2 Java Überblick Programmieren 2 Java Überblick 1 Klassen und Objekte 2 Vererbung 3 Schnittstellen 5 Exceptions 6 Funktionsbibliothek 7 Datenstrukturen und Algorithmen 8 Ein-/Ausgabe 9 Graphische Benutzeroberflächen 10

Mehr

Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II a[0] a[1] a[2] a[3] a[n 1]

Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II a[0] a[1] a[2] a[3] a[n 1] Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II -108 Kapitel 5: Arrays Einführung Ein Array ist eine Reihung gleichartiger Objekte. a: a[0] a[1] a[2] a[3] a[n 1] Bezeichner a steht

Mehr

Die abstrakte Klasse Expression:

Die abstrakte Klasse Expression: Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const 501 Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const Leider (zum Glück?) lässt sich nicht die

Mehr

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Dynamische Datentypen Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Probleme mit Feldern (variabler Länge) man kann sie nicht direkt kopieren und zuweisen Probleme mit

Mehr