Goals of this Lecture. Generics(Γενικότητα) Generic Data Structures Example. Generic Data Structures Example

Σχετικά έγγραφα
Generics (Γενικότθτα)

The Simply Typed Lambda Calculus

Instruction Execution Times

2 Composition. Invertible Mappings

HY150a Φροντιστήριο 3 24/11/2017

Other Test Constructions: Likelihood Ratio & Bayes Tests

EE512: Error Control Coding

Finite Field Problems: Solutions

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE)

Phys460.nb Solution for the t-dependent Schrodinger s equation How did we find the solution? (not required)

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

Μορφοποίηση υπό όρους : Μορφή > Μορφοποίηση υπό όρους/γραμμές δεδομένων/μορφοποίηση μόο των κελιών που περιέχουν/

SOAP API. Table of Contents

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT)

Μηχανική Μάθηση Hypothesis Testing

Lecture 2. Soundness and completeness of propositional logic

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

derivation of the Laplacian from rectangular to spherical coordinates

Homework 3 Solutions

Models for Probabilistic Programs with an Adversary

TMA4115 Matematikk 3

About these lecture notes. Simply Typed λ-calculus. Types

ST5224: Advanced Statistical Theory II

Test Data Management in Practice

Fractional Colorings and Zykov Products of graphs

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

HOMEWORK 4 = G. In order to plot the stress versus the stretch we define a normalized stretch:

Section 8.3 Trigonometric Equations

Concrete Mathematics Exercises from 30 September 2016

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1

4.6 Autoregressive Moving Average Model ARMA(1,1)

SUPERPOSITION, MEASUREMENT, NORMALIZATION, EXPECTATION VALUES. Reading: QM course packet Ch 5 up to 5.6

Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 133: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial

The challenges of non-stable predicates

Οδηγίες Αγοράς Ηλεκτρονικού Βιβλίου Instructions for Buying an ebook

Statistical Inference I Locally most powerful tests

Modbus basic setup notes for IO-Link AL1xxx Master Block

Chapter 6: Systems of Linear Differential. be continuous functions on the interval

Fourier Series. MATH 211, Calculus II. J. Robert Buchanan. Spring Department of Mathematics

Στο εστιατόριο «ToDokimasesPrinToBgaleisStonKosmo?» έξω από τους δακτυλίους του Κρόνου, οι παραγγελίες γίνονται ηλεκτρονικά.

Econ 2110: Fall 2008 Suggested Solutions to Problem Set 8 questions or comments to Dan Fetter 1

6.3 Forecasting ARMA processes

Ordinal Arithmetic: Addition, Multiplication, Exponentiation and Limit

ω ω ω ω ω ω+2 ω ω+2 + ω ω ω ω+2 + ω ω+1 ω ω+2 2 ω ω ω ω ω ω ω ω+1 ω ω2 ω ω2 + ω ω ω2 + ω ω ω ω2 + ω ω+1 ω ω2 + ω ω+1 + ω ω ω ω2 + ω

Section 7.6 Double and Half Angle Formulas

Example Sheet 3 Solutions

Exercises 10. Find a fundamental matrix of the given system of equations. Also find the fundamental matrix Φ(t) satisfying Φ(0) = I. 1.

Numerical Analysis FMN011

Paper Reference. Paper Reference(s) 1776/04 Edexcel GCSE Modern Greek Paper 4 Writing. Thursday 21 May 2009 Afternoon Time: 1 hour 15 minutes

Lecture 34 Bootstrap confidence intervals

Physical DB Design. B-Trees Index files can become quite large for large main files Indices on index files are possible.

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

Κατανεμημένα Συστήματα. Javascript LCR example

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Ηλεκτρονική Υγεία

Every set of first-order formulas is equivalent to an independent set

Web Data Mining ΕΡΓΑΣΤΗΡΙΟ 2 & 3. Prepared by Costantinos Costa Edited by George Nikolaides. EPL Data Mining on the Web

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

C.S. 430 Assignment 6, Sample Solutions

3.4 SUM AND DIFFERENCE FORMULAS. NOTE: cos(α+β) cos α + cos β cos(α-β) cos α -cos β

Bounding Nonsplitting Enumeration Degrees

Συστήματα Διαχείρισης Βάσεων Δεδομένων

Inverse trigonometric functions & General Solution of Trigonometric Equations

Εισαγωγή στην Γλώσσα Προγραμματισμού Python. 12/10/16 1

Section 9.2 Polar Equations and Graphs

Solutions to the Schrodinger equation atomic orbitals. Ψ 1 s Ψ 2 s Ψ 2 px Ψ 2 py Ψ 2 pz

( ) 2 and compare to M.

Partial Differential Equations in Biology The boundary element method. March 26, 2013

Chapter 29. Adjectival Participle

(C) 2010 Pearson Education, Inc. All rights reserved.

Εγκατάσταση λογισμικού και αναβάθμιση συσκευής Device software installation and software upgrade

Practice Exam 2. Conceptual Questions. 1. State a Basic identity and then verify it. (a) Identity: Solution: One identity is csc(θ) = 1

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

Code Breaker. TEACHER s NOTES

Démographie spatiale/spatial Demography

Ενότητες στην C Τεχνική Υλοποίησης Αφαιρετικών Τύπων Δεδομένων στην C

Math 6 SL Probability Distributions Practice Test Mark Scheme

Block Ciphers Modes. Ramki Thurimella

ΑΥΤΟΜΑΤΟΠΟΙΗΣΗ ΜΟΝΑΔΑΣ ΘΡΑΥΣΤΗΡΑ ΜΕ ΧΡΗΣΗ P.L.C. AUTOMATION OF A CRUSHER MODULE USING P.L.C.

Main source: "Discrete-time systems and computer control" by Α. ΣΚΟΔΡΑΣ ΨΗΦΙΑΚΟΣ ΕΛΕΓΧΟΣ ΔΙΑΛΕΞΗ 4 ΔΙΑΦΑΝΕΙΑ 1

forms This gives Remark 1. How to remember the above formulas: Substituting these into the equation we obtain with

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Capacitors - Capacitance, Charge and Potential Difference

Lecture 2: Dirac notation and a review of linear algebra Read Sakurai chapter 1, Baym chatper 3

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

From the finite to the transfinite: Λµ-terms and streams

Partial Trace and Partial Transpose

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Overview. Transition Semantics. Configurations and the transition relation. Executions and computation

Προσωπική Aνάπτυξη. Ενότητα 2: Διαπραγμάτευση. Juan Carlos Martínez Director of Projects Development Department

ίκτυο προστασίας για τα Ελληνικά αγροτικά και οικόσιτα ζώα on.net e-foundatio // itute: toring Insti SAVE-Monit

Φροντιςτήριο. Linked-List

Χαρακτηριστικά ενοτήτων

Transcript:

Generics(Γενικότητα) Μπορούμε να κατασκευάσουμε ΑΤΔ που επιτρέπει χρήση με διαφορετικούς Τύπους Δεδομένων στο ίδιο πρόγραμμα; Π.χ. Μια στοίβα με char* και μια με int Goals of this Lecture Help you learn about: Generic modules Data structures that can store multiple types of data Functions that can work on multiple types of data How to create generic modules in C Which wasn t designed with generic modules in mind! Why? Reusing existing code is easier/cheaper than writing new code; reuse reduces software costs Generic modules are more reusable than non-generic ones A power programmer knows how to create generic modules A power programmer knows how to use existing generic modules to create large programs 1 2 Generic Data Structures Example Stack void Stack_push(Stack_T s, const char *item); char *Stack_top(Stack_T s); Items are strings (type char*) Generic Data Structures Example Stack operations (push, pop, top, etc.) make sense for items other than strings too So Stack module could (and maybe should) be generic Problem: How to make Stack module generic? How to define Stack module such that a Stack object can store items of any type? 3 4 1

Generic Data Structures via typedef Solution 1: Let clients define item type (G2) struct Item { char *str; /* Or whatever is appropriate */ ; struct Item item; item.str = "hello"; Stack_push(s, item); typedef struct Item *Item_T; void Stack_push(Stack_T s, Item_T item); Item_T Stack_top(Stack_T s); Generic Data Structures via typedef Problem: Awkward for client to define structure type and create structures of that type Problem: Client (or some other module in same program) might already use Item_T for some other purpose! Problem: Client might need two Stack objects holding different types of data!!! We need another approach 5 6 Solution 2: The generic pointer (void*) (G3) Can assign a pointer of any type to a void pointer Stack_push(s, "hello"); OK to match an actual parameter of type char* with a formal parameter of type void* 7 8 2

Can assign a void pointer to a pointer of any type char *str; Stack_push(s, "hello"); str = Stack_top(s); OK to assign a void* return value to a char* 9 Problem: Client must know what type of data a void pointer is pointing to int *i; Stack_push(s, "hello"); i = Stack_top(s); Client pushes a string Client considers retrieved value to be a pointer to an int! Legal!!! Trouble!!! Solution: None Void pointers subvert the compiler s type checking Programmer s responsibility to avoid type mismatches 10 Problem: Stack items must be pointers E.g. Stack items cannot be of primitive types (int, double, etc.) int i = 5; Stack_push(s, 5); Stack_push(s, &i); Not OK to match an actual parameter of type int with a formal parameter of type void* OK, but Solution: none awkward In C, there is no mechanism to create truly generic data structures (In C++: Use template classes and template functions) (In Java: Use generic classes) 11 Generic Algorithms Example Suppose we wish to add another function to the Stack module int Stack_areEqual(Stack_T s1, Stack_T s2); Returns 1 (TRUE) iff s1 and s2 are equal, that is, contain equal items in the same order 12 3

Generic Algorithm Attempt 1 Attempt 1 return s1 == s2; Returns 0 (FALSE) Incorrect! Checks if s1 and s2 are identical, not equal Compares pointers, not items That s not what we want Addresses vs. Values Suppose two locations in memory have the same value int i=5; int j=5; i 5 j 5 The addresses of the variables are notthe same That is (&i==&j) is FALSE Need to compare the values themselves That is (i== j) is TRUE Unfortunately, comparison operation is type specific The == works for integers and floating-point numbers But not for strings and more complex data structures 13 14 Generic Algorithm Attempt 2 Attempt 2 if (p1!= p2) return 1; Checks if nodes are identical Compares pointers, not items That is stillnot what we want Returns 0 (FALSE) Incorrect! Generic Algorithm Attempt 3 Attempt 3 if (p1->item!= p2->item) return 1; Returns 0 (FALSE) Checks if items are identical Incorrect! Compares pointers to items, not items themselves That is stillnot what we want 15 16 4

Generic Algorithm Attempt 4 Attempt 4 if (strcmp(p1->item, p2->item)!= 0) return Checks 1; if items are equal That s what we want But strcmp()works only if items are strings! We need Stack_areEqual() to be generic How to compare values when we don t know their type? Returns 1 (TRUE) Correct! 17 Approach 5 int Stack_areEqual(Stack_T s1, Stack_T s2, int (*cmp)(const void *item1, const void *item2)); Add parameter to Stack_areEqual() Pointer to a compare function, which Accepts two const void * parameters, and Returns an int Allows client to supply the function that Stack_areEqual()should call to compare items 18 int Stack_areEqual(Stack_T s1, Stack_T s2, int (*cmp)(const void *item1, const void *item2)) { if ((*cmp)(p1->item, p2->item)!= 0) return 1; Definition of Stack_areEqual() uses the function pointer to call the clientsupplied compare function Stack_areEqual() calls back into client code 19 int strcompare(const void *item1, const void *item2) { char *str1 = item1; char *str2 = item2; return strcmp(str1, str2); if (Stack_areEqual(s1,s2,strCompare)) { Returns 1 (TRUE) Correct! Client passes address of strcompare() to Stack_areEqual() Client defines callback function, and passes pointer to it to Stack_areEqual() Callback function must match Stack_areEqual() parameter exactly 20 5

Alternative: Client defines more natural callback function, and casts it to match Stack_areEqual() parameter int strcompare(const char *str1, const char *str2) { return strcmp(str1, str2); if (Stack_areEqual(s1, s2, (int (*)(const void*, const void*))strcompare)) { Cast operator if (Stack_areEqual(s1, s2, (int (*)(const void*, const void*))strcmp)) { Cast operator Alternative (for string comparisons only): Simply use strcmp() with cast! 21 22 Summary Generic data structures Via item typedef Safe, but not realistic Via the generic pointer (void*) Limiting: items must be pointers Dangerous: subverts compiler type checking The best we can do in C (See C++ template classes and Java generics for other approaches) Generic algorithms Via function pointers and callback functions Genericity ΤΣ καθορισμένος στον κώδικα, χωρίς αφαίρεση ΤΣ #include σε.h (και αντίστοιχο.c) ΤΣ (Πλήρης απόκρυψη και ΤΣ *Τ)(παράμετροι συναρτήσεων και data του ΑΤΔ είναι *Τ) ΤΣ (Πλήρης απόκρυψη ΤΣ *Τ)(παράμετροι συναρτήσεων και data του ΑΤΔ είναι void*) + Υλοποίηση Ενοτήτων (Modules) στην C και Γενικότητα (Genericity) Modularity No Modularity (0) Απόκρυψη Πράξεων (ΜΑ) (1) Απόκρυψη Δεδομένων και Πράξεων (ΠΑ)(2,3) + - ΌΧΙ (Demo Mod 0) ΌΧΙ λόγω G (Demo Mod 1) ΌΧΙ λόγω G (Demo Mod 3+2) έλεγχος μεταγλώττισης ΌΧΙ λόγω Modularity ΌΧΙ λόγω Modularity ΌΧΙ λόγω Modularity Να αποφεύγεται εντελώς, καμία -απόκρυψη NAI με Προσοχή όπως ουρά 1ης άσκησης Χωρίς ιδιαίτερο όφελος Χωρίς ιδιαίτερο όφελος Καλή προσέγγιση, προσοχή στην άμεση χρήση στον Τύπο. Κίνδυνοι άμεσης πρόσβασης στον ΤΑ, αλλοίωση απόκρυψης Αλλαγή ΤΣ δεν απαιτεί αλλαγή ΝΑΙ (απλό με πολλά πλεονεκτήματα) υλοποίησης ΑΤΔ, έλεγχος ουρά 2ης άσκησης μεταγλώττισης Αλλαγή ΤΣ δεν απαιτεί αλλαγή ΝΑΙ, απαιτεί καλή χρήση δεικτών υλοποίησης ΑΤΔ, δεν απαιτεί Mod 3 Gen 1-T (SetValue recompilation, έλεγχος απλουστεύεται)(compare) μεταγλώττισης 1 μόνο ΤΣ, Αλλαγή ΤΣ απαιτεί Αλλαγή Υλοποίησης ΑΤΔ, απαιτεί recompilation 1 μόνο ΤΣ, Αλλαγή ΤΑ απαιτεί recompilation 1 μόνο ΤΣ Χρήσιμη για βιβλιοθήκες, απαιτεί πολλά-τσ, σταθερή υλοποίηση ΑΤΔ, καλούς ελέγχους. Mod 3 Gen n-type χωρίς έλεγχο μεταγλώττισης δεν απαιτεί recompilation (compare) Η καλύτερη απόκρυψη Διαχειριζόμαστε δείκτες και όχι structs 1 ΤΣ μπορεί να καλύπτει πολλούς τύπους με union 23 24 6