ΒΙΒΛΙΟΘΗΚΕΣ ΚΑΙ ΠΕΛΑΤΕΣ Ι-1

Σχετικά έγγραφα
Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #6

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Βασικά Στοιχεία της Java

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

Αντικειμενοστρεφής Προγραμματισμός

Βασικά Στοιχεία της Java

Αντικειµενοστρεφής Προγραµµατισµός

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Δοκιμή και Αποσφαλμάτωση Testing and Debugging

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΕΠΛ131 Αρχές Προγραμματισμού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις

Mεταβλητές (variables) και Σταθερές (constants)

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

οµές Επιλογής Εντολές if και switch

3. Εκφράσεις και έλεγχος ροής

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

Διαδικασιακός Προγραμματισμός

8. Μέθοδοι (Methods)

Στοιχειώδης προγραμματισμός σε C++

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Μία Μελέτη Περίπτωσης: Διήθηση

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

Δομημένος Προγραμματισμός (ΤΛ1006)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Εισαγωγή στον Προγραμματισμό

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 2: Βασικές εντολές

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 4/3/2008

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Δεδομένα, τελεστές, είσοδος/έξοδος

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Δομημένος Προγραμματισμός (ΤΛ1006)

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 1: Εισαγωγικές έννοιες

3 Αλληλεπίδραση Αντικειμένων

ΑΝΑΛΥΤΙΚΟ ΠΡΟΓΡΑΜΜΑ ΚΑΙ ΕΞΕΤΑΣΤΕΑ ΥΛΗ. ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Με τις Γλώσσες Προγραμματισμού Pascal, C, C++, Java

Εισαγωγή στον Προγραμματισμό

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Wrapper Classes, Abstract Classes and Interfaces

Αντικειμενοστραφής Προγραμματισμός

Ανάπτυξη και Σχεδίαση Λογισμικού

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 18/3/2008

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Εισαγωγή στον Προγραµµατισµό - Εβδοµάδα 7

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΕΠΛ131 Αρχές Προγραμματισμού

Δομές ελέγχου ροής προγράμματος

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Περισσότερα για τις Κλάσεις, τα Αντικείμενα και τις Μεθόδους

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

ΗΥ-150. Προγραμματισμός

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Δοµές Δεδοµένων. 3η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες. Ε. Μαρκάκης

Προγραμματισμός Ι (ΗΥ120)

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

Εισαγωγή στον Προγ/μό Η/Υ

Ενσωματωμένοι Τύποι Δεδομένων. ΕΠΛ131 Ενότητα III

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Κλάσεις και Αντικείµενα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΗΥ-150. Προγραμματισμός

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

2. Προσδιοριστές, δεσμευμένες λέξεις και τύποι

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Transcript:

ΒΙΒΛΙΟΘΗΚΕΣ ΚΑΙ ΠΕΛΑΤΕΣ Ι-1

Εκμάθηση γλώσσας προγρ/σμού Η εκμάθηση μίας γλώσσας προγραμματισμού μπορεί να χωρισθεί σε δύο μέρη Εκμάθηση της γλώσσας Σύνταξη, εντολές επιλογής, βρόγχοι, Εκμάθηση των βιβλιοθηκών (API) Συχνά χρησιμοποιούμενες δομές δεδομένων Διαπροσωπείες ανθρώπου-μηχανής (GUI), είσοδος/έξοδος, αποθήκευση δεδομένων, δικτύωση, 2

Βιβλιοθήκες Βιβλιοθήκη. Μία ενότητα της οποίας οι μέθοδοι προορίζονται για χρήση από πολλά άλλα προγράμματα. Πελάτης. Πρόγραμμα το οποίο καλεί μια βιβλιοθήκη. API. Συμβόλαιο μεταξύ πελάτη και υλοποίησης. Υλοποίηση. Πρόγραμμα το οποίο υλοποιεί τις μεθόδους σε ένα API. 3

Εκμάθηση των βιβλιοθηκών (API) API = Application Programming Interface Η διαπροσωπεία (συμβάσεις κλήσεως) μέσω της οποίας ένας προγραμματιστής εφαρμογών προσπελαύνει την βιβλιοθήκη κλάσεων της Java Java 2 Platform, Standard Edition, v 1.6 http://download.oracle.com/javase/6/docs/api/ 4

Java 2 Platform, Standard Edition, v 6 5

Βιβλιοθήκη κλάσεων Java Η Java 2 Platform, Standard Edition, παρέχει μια μεγάλη συλλογή από κλάσεις που υποστηρίζουν και απλουστεύουν πολλές συνήθεις προγραμματιστικές δραστηριότητες GUIs, TCP/IP sockets, συμπίεση (ZIP), 2D Graphics, κρυπτογράφηση Οι «θεμελιώδεις κλάσεις Java» είναι μέρος της «Java 2 standard language» 6

7

Συχνά χρησιμοποιούμενα πακέτα java.lang Παρέχει κλάσεις που θεωρούνται θεμελιώδεις για το σχεδιασμό της γλώσσας προγραμματισμού Java (περιλαμβάνει την κλάση Math) java.lang.math Παρέχει κλάσεις για την εκτέλεση αριθμητικών πράξεων μεγάλης ακρίβειας με ακέραιους και πραγματικούς αριθμούς. 8

Το μέγεθος των πακέτων Με μια πρώτη ματιά ο μεγάλος αριθμός των κλάσεων καθιστά αδύνατη την εκμάθηση τους. Στις περισσότερες περιπτώσεις ο προγραμματιστής χρειάζεται να γνωρίζει μόνο ένα υποσύνολο των κλάσεων. Το υποσύνολο των κλάσεων που πρέπει να γνωρίζει ένας προγραμματιστής εξαρτάται από τις εφαρμογές που αναπτύσσει. Σημαντική είναι η ικανότητα εντοπισμού των αναγκαίων για τη σωστή ανάπτυξη προγραμμάτων κλάσεων στις βιβλιοθήκες. 9

Σύγκριση Συχνότητα χρήσης λέξεων Οι 25 συχνότερα χρησιμοποιούμενες λέξεις αποτελούν περίπου το 1/3 του έντυπου υλικού (στην Αγγλική) Οι 100 συχνότερα χρησιμοποιούμενες λέξεις αποτελούν περίπου το 1/2 του έντυπου υλικού Οι 300 συχνότερα χρησιμοποιούμενες λέξεις αποτελούν περίπου το 65% του έντυπου υλικού www.duboislc.org/educationwatch/first100words.html 10

Πακέτα Εντολές Κλάσεις Υπάρχουν τρία στοιχεία που μπορεί να αποτελούν μέρη ενός αρχείου πηγαίου κώδικα Κανένα από αυτά δεν είναι αναγκαίο Αν ένα ή περισσότερα είναι παρόντα πρέπει να εμφανίζονται με την παρακάτω σειρά: Δήλωση πακέτου (package declaration) Εισαγωγή εντολών (import statements) Ορισμός κλάσης (class definition) 11

Παράδειγμα Java import javax.swing.*; public class SimpleGUIExample { public static void main(string s[]) { // we do lots of windows stuff here ;-) 12

import Οι εντολές Import εισάγουν ένα ολόκληρο πακέτο η μια συγκεκριμένη κλάση κλάση import java.awt.button; ολόκληρο πακέτο import java.util.*; 13

import Εάν κλάση με το ίδιο όνομα υπάρχει σε δυο διαφορετικά πακέτα, τότε αναφορές στην κλάση αυτή πρέπει να περιέχουν και το όνομα του πακέτου GP.Point point = new GP.Point(area, 20, 20); java.awt.point point = new awt.point (30, 3); Εάν δεν προσδιοριστεί το πακέτο ο μεταφραστής της java θα παράγει το διαγνωστικό μήνυμα: Ambiguous class: GP.Point and java.awt.point 14

Συχνά χρησιμοποιούμενες κλάσεις String Math System Κλάσεις συσκευαστές (Wrapper classes) 15

Η κλάση String Η κλάση String είναι ίσως η πιο συχνά χρησιμοποιούμενη κλάση Αντικείμενα τύπου String δεν μπορεί να μεταλλαχθούν Η τιμή τους δεν μπορεί να αλλαχθεί μετά τη δημιουργία τους Η Java υποστηρίζει τον ειδικό τελεστή συνένωσης αλφαριθμητικών ( + ) String cde = "cde"; System.out.println("abc" + cde); 16

Η κλάση String Η κλάση String περιλαμβάνει μεθόδους οι οποίες υποστηρίζουν: Ατομική εξέταση χαρακτήρων της συμβολοσειράς Σύγκριση συμβολοσειρών Αναζήτηση «Εξαγωγή» τμημάτων συμβολοσειρών Δημιουργία αντιγράφων συμβολοσειρών όπου όλα τα γράμματα έχουν μετατραπεί σε πεζά ή κεφαλαία 17

Η κλάση Math Περιέχει μεγάλο αριθμό στατικών μεθόδων για μαθηματικούς υπολογισμούς abs, max, min, sin, cos, tan, sqrt etc. random (επιστρέφει τυχαίο αριθμό ανάμεσα στο 0 και το 1) Εάν χρειάζεστε έναν τυχαίο αριθμό (τύπου double) από το διάστημα [0.0, 1.0) double myrandom = Math.random(); // [0,1) 18

Η κλάση Math Περιέχει 2 σταθερές Math.PI Math.E (βάση του φυσικού λογάριθμου) 19

Κλάσεις Συσκευαστές (Wrapper Classes) Η Java έχει μία κλάση συσκευαστή για κάθε ένα από τους βασικούς τύπους δεδομένων : Primitive Type Wrapper Class Primitive Type Wrapper Class boolean Boolean float Float byte Byte int Integer char Character long Long double Double short Short Η κλάση διακρίνεται από το κεφαλαίο αρχικό της γράμμα Εξαίρεση είναι οι τύποι char και int στους οποίους αντιστοιχούν οι Character και Integer Οι κλάσεις συσκευαστές περιέχουν στατικές μεθόδους για την «μετάφραση» συμβολοσειρών Integer.parseInt(inputString) 20

Παράδειγμα Java public class SimpleExample { public static void main(string s[]) { String mystringa = "123"; String mystringb = "456"; int myint = Integer.parseInt(myStringA) + Integer.parseInt(myStringB); System.out.println("Addition 1 " + mystringa + mystringb); System.out.println("Addition 2 " + myint); D:\>java SimpleExample Addition 1 123456 Addition 2 579 21

Η κλάση System Χρησιμοποιείται για προσπέλαση ιδιοτήτων του συστήματος, του συλλέκτη σκουπιδιών, της τρέχουσας ώρας, και επιτρέπει την αλλαγή της κύριας εισόδου, εξόδου και εξόδου λαθών. Όπως συμβαίνει και με την κλάση Math, όλες οι μέθοδοι και μεταβλητές της κλάσης System είναι μέθοδοι και μεταβλητές κλάσης (στατικές) Περιέχει τη μέθοδο exit() η οποία τερματίζει την εκτέλεση της εικονικής μηχανής Java (JVM) 22

Η κλάση System Η στατική μέθοδος System.currentTimeMilliseconds() επιστρέφει την τρέχουσα ώρα Στην Java η ώρα είναι ένας αριθμός τύπου long που αναπαριστά χιλιοστά του δευτερολέπτου (milliseconds) Αρχή μέτρησης χρόνου: GMT 1 η Ιανουαρίου 1970 Πεδίο 64 bits: έως 292,280,995 μ.χ. Οι αριθμοί τύπου long στην Java έχουν πρόσημο. Αρνητικές τιμές ερμηνεύονται ως χρονικές στιγμές πριν την αρχή της «νέας χρονικής περιόδου» 23

Αποδοκιμασία/απαξίωση (Deprecation) Οι επίσημες βιβλιοθήκες της Java (API) αλλάζουν μεταξύ διαδοχικών εκδόσεων Ορισμένοι τρόποι επίλυσης προγραμματιστικών προβλημάτων παύουν να ενδείκνυνται και η χρήση τους ίσως παύσει να υποστηρίζεται σε μελλοντικές εκδόσεις της βιβλιοθήκης Για να διευκολύνει την έγκαιρη μετατροπή των προγραμμάτων, ο μεταφραστής της Java προειδοποιεί όποτε επιχειρούμε να μεταφράσουμε ένα πρόγραμμα που χρησιμοποιεί μια αποδοκιμασμένη κλάση ή μέθοδο 24

Τυχαίοι Αριθμοί Η παραγωγή τυχαίων αριθμών είναι πολύ σημαντικό να αφεθεί στην τύχη. Όποιος εξετάζει αριθμητικές μεθόδους παραγωγής τυχαίων ψηφίων είναι σε μια κατάσταση αμαρτίας. Jon von Neumann (αριστερά), ENIAC (δεξιά)

Standard Random Standard random. Η βιβλιοθήκη μας η οποία παράγει ψευδο-τυxαίους αριθμούς. 26

public class StdRandom { Standard Random // between a and b public static double uniform(double a, double b) { return a + Math.random() * (b-a); // between 0 and N-1 public static int uniform(int N) { return (int) (Math.random() * N); // true with probability p public static boolean bernoulli(double p) { return Math.random() < p; // gaussian with mean = 0, stddev = 1 public static double gaussian() // recall Assignment 0 // gaussian with given mean and stddev public static double gaussian(double mean, double stddev) { return mean + (stddev * gaussian());... 27

Έλεγχος Μονάδας Έλεγχος Μονάδας (Unit Test). Περιλαμβάνει τη main() για να ελέγξει κάθε βιβλιοθήκη. public class StdRandom {... public static void main(string[] args) { int N = Integer.parseInt(args[0]); double[] t = {.5,.3,.1,.1 ; for (int i = 0; i < N; i++) { StdOut.printf(" %2d ", uniform(100)); StdOut.printf("%8.5f ", uniform(10.0, 99.0)); StdOut.printf("%5b ", bernoulli(.5)); StdOut.printf("%7.5f ", gaussian(9.0,.2)); StdOut.printf("%2d ", discrete(t)); StdOut.println(); % java StdRandom 5 61 21.76541 true 9.30910 0 57 43.64327 false 9.42369 3 31 30.86201 true 9.06366 0 92 39.59314 true 9.00896 0 36 28.27256 false 8.66800 1 28

Χρησιμοποιώντας μία βιβλιοθήκη public class RandomPoints { public static void main(string args[]) { int N = Integer.parseInt(args[0]); for (int i = 0; i < N; i++) { double x = StdRandom.gaussian(0.5, 0.2); double y = StdRandom.gaussian(0.5, 0.2); StdDraw.point(x, y); % javac RandomPoints.java % java RandomPoints 10000 Χρησιμοποιεί το όνομα της βιβλιοθήκης για να προκαλέσει τη μέθοδο 29

Βασικά Στατιστικά Π.χ. Βιβλιοθήκη όπου υπολογίζει τα στατιστικά σε μία συστοιχία πραγματικών αριθμών. mean sample variance 30

Βασικά Στατιστικά Π.χ. Βιβλιοθήκη όπου υπολογίζει τα στατιστικά σε μία συστοιχία πραγματικών αριθμών. public class StdStats { public static double max(double[] a) { double max = Double.NEGATIVE_INFINITY; for (int i = 0; i < a.length; i++) if (a[i] > max) max = a[i]; return max; public static double mean(double[] a) { double sum = 0.0; for (int i = 0; i < a.length; i++) sum = sum + a[i]; return sum / a.length; public static double stddev(double[] a) // see text 31

Βιβλιοθήκες Γιατί να χρησιμοποιήσουμε βιλβιοθήκες? Κάνει τον κώδικα ευκολότερο για να τον κατανοήσουμε. Κάνει τον κώδικα ευκολότερο ώστε να εντοπίζουμε τα σφάλματα που υπάρχουν (debugging). Κάνει τον κώδικα ευκολότερο για να συντηρηθεί και να βελτιωθεί. Κάνει τον κώδικα ευκολότερο για να επαναχρησιμοποιηθεί. 32

Συνήθη σφάλματα Οι βασικοί τύποι και τα αντικείμενα είναι πολύ διαφορετικές οντότητες Μέθοδοι δεν μπορούν να κληθούν για βασικούς τύπους Τελεστές όπως οι +, -, * και / δεν μπορεί να εφαρμοστούν στα περισσότερα αντικείμενα Σημείωση: Η χρήση του τελεστή + με αντικείμενα τύπου String είναι η μόνη εξαίρεση Υπάρχουν και άλλες διάφορες που δεν έχουν αναφερθεί 33

Συνήθη σφάλματα public class SimpleExample { public static void main(string s[]) { int myinta = 56; Integer myintb = new Integer(56); int valuea = myintb + myinta; int valueb = myinta.intvalue() + myintb.intvalue(); int valuec = myinta + myintb.intvalue(); 34

Συνήθη σφάλματα D:\t>javac SimpleExample.java SimpleExample.java:8: Incompatible type for +. Can't convert java.lang.integer to int. int valuea = myintb + myinta; ^ SimpleExample.java:9: Can't invoke a method on a int. int valueb = myinta.intvalue() + myintb.intvalue(); ^ 2 errors 35

Δημιουργώντας τις Δικές μας Βιβλιοθήκες 36

public class CardLib boolean SingleDigit (long x) είναι ο x μονοψήφιος; long LastDigit (long n) τελευταίο ψηφίο του n long RestDigits (long n) υπόλοιπα ψηφία του n long AddDigit (long x, long d) πρόσθεση ψηφίου στο τέλος long Join (long x, long y) ένωση των δύο αριθμών int Length (long x) αριθμός ψηφίων long Digit (long n, int i) i-οστό ψηφίο int Occur (long n, int d) αριθμός εμφανίσεων του d long Delete (long n, int d) διαγραφή ψηφίου d long DeleteNth (long n, int i) διαγραφή ψηφίου d long Reverse (long n) αντιστροφή ψηφίων boolean Palindrome (long n) είναι palindrome; boolean Sorted (long n) είναι τα ψηφία ταξινομημένα σε αύξουσα σειρά από τα αριστερά; API για τη βιβλιοθήκη μας CardLib, η οποία ορίζει συναρτήσεις για την επεξεργασία φυσικών αριθμών. Όλες οι συναρτήσεις θεωρούν ότι λαμβάνουν φυσικούς αριθμούς.

Παρατηρήσεις Μπορούν να προστεθούν και άλλες συναρτήσεις Συνήθως κρατούμε τον αριθμό των συναρτήσεων σε μια βιβλιοθήκη σχετικά μικρό Η προσθήκη νέων συναρτήσεων ή αλλαγές στην υλοποίηση υφιστάμενων συναρτήσεων μιας βιβλιοθήκης, υπό την προϋπόθεση ότι οι διεπαφές τους (signatures) παραμένουν σταθερές, δεν συνεπάγονται αλλαγές σε υφιστάμενους clients Η συνάρτηση main είναι για τη δοκιμή της βιβλιοθήκης (test harness)

// Implementing CardLib public static boolean SingleDigit (long x){ return x < 10 && x >= 0; public static long LastDigit (long n) { return n%10; public static long RestDigits (long n){ return n/10; public static long AddDigit (long x, long d){ if (SingleDigit(d)) return x*10+d; else return 0; // recursive definition for Join public static long Join (long x, long y){ if (SingleDigit(y)) return AddDigit(x,y); else return AddDigit(Join(x, RestDigits(y)), LastDigit(y));

// Implementing CardLib // recursive definition for Length public static int Length (long x){ if (SingleDigit(x)) return 1; else return 1 + Length(RestDigits(x)); // recursive definition for Digit public static long Digit (long n, int i){ if (i > Length(n)) return 0; else if (i == 1) return LastDigit(n); else return Digit(RestDigits(n), i - 1); // recursive definition for Occur public static int Occur (long n, int d){ if (n == 0) return 0; else if (d == LastDigit(n)) return 1 + Occur(RestDigits(n), d); else return Occur(RestDigits(n), d); // recursive definition for Delete public static long Delete (long n, int d){ if (SingleDigit(n)) {if (n == d) return 0; else return n; else if (d == LastDigit(n)) return Delete (RestDigits(n), d); else return AddDigit(Delete(RestDigits(n), d), LastDigit(n)); ΙVX-40

// Implementing CardLib // recursive definition for DeleteNth public static long DeleteNth (long n, int i){ if (i > Length(n)) return n; else if (i == 1) return RestDigits(n); else return AddDigit(DeleteNth(RestDigits(n), i - 1), LastDigit(n)); // recursive definition for Reverse public static long Reverse (long n){ if (SingleDigit(n)) return n; else return Join(LastDigit(n), Reverse(RestDigits(n))); // declarative definition for Palindrome public static boolean Palindrome (long n){ return n == Reverse(n); πιο αποδοτική αυτή η σειρά συνθηκών στον τελεστή && // recursive definition for Sorted public static boolean Sorted (long n){ if (SingleDigit(n)) return true; else return LastDigit(RestDigits(n)) <= LastDigit(n)&& Sorted(RestDigits(n));

Άσκηση Για τις συναρτήσεις που ορίζονται με αναδρομή, δώστε νέους ορισμούς που να χρησιμοποιούν επανάληψη

Εναλλακτικός ορισμός της Palindrome, ο οποίος χρησιμοποιεί επανάληψη Ανάλυση Περιπτώσεων 1. Φυσικοί αριθμοί με μονό αριθμό ψηφίων: Περιπτώσεις που είναι palindrome: 5 Όλοι οι μονοψήφιοι αριθμοί είναι 444 1238321 Περιπτώσεις που δεν είναι: 123 3456345 2. Φυσικοί αριθμοί με ζυγό αριθμό ψηφίων: Περιπτώσεις που είναι palindrome: 22 6776 Περιπτώσεις που δεν είναι: 195195

Είσοδος: Φυσικός αριθμός Ν Αλγόριθμος Έξοδος: Κατά πόσον ο Ν είναι ή δεν είναι Palindrome Αρχίζοντας από το αριστερότερο και το δεξιότερο ψηφίο του Ν, ενόσω υπάρχουν αντίστοιχα ψηφία και τα τρέχοντα αντίστοιχα ψηφία είναι όμοια, προχωρούμε προς τα αμέσως επόμενα ψηφία και στις δύο κατευθύνσεις Εάν έχουν εξαντληθεί τα ψηφία, τότε ο Ν είναι Palindrome, διαφορετικά δεν είναι Αλγοριθμική δομή της επανάληψης Η λογική έκφραση που διέπει την επανάληψη είναι σύζευξη

Είσοδος: Φυσικός αριθμός Ν Εκλεπτυσμένος Αλγόριθμος Έξοδος: Κατά πόσον ο Ν είναι ή δεν είναι palindrome left η θέση του αριστερότερου ψηφίου του Ν right η θέση του δεξιότερου ψηφίου του Ν Ενόσω (η θέση left δεν έχει διαπεράσει τη θέση right και το ψηφίο στη θέση left ισούται με το ψηφίο στη θέση right) τότε η θέση left μετακινείται μία θέση στα δεξιά η θέση right μετακινείται μία θέση στα αριστερά Εάν η θέση left έχει διαπεράσει τη θέση right, τότε ο Ν είναι palindrome, διαφορετικά δεν είναι

Ομοιόμορφη αντιμετώπιση όλων των περιπτώσεων Μονός αριθμός ψηφίων left right left right 1 1 Είναι left right 3 1 1 Δεν είναι left right left right left right 6 9 6 6 9 6 6 9 6 Είναι

Ομοιόμορφη αντιμετώπιση όλων των περιπτώσεων Ζυγός Αριθμός Ψηφίων left right left right 8 8 8 8 Είναι left right left right 3 1 6 3 3 1 6 3 Δεν είναι

Σύζευξη που διέπει την επανάληψη 1. Τα αντίστοιχα ψηφία είναι όμοια 2. Δεν έχουν διασταυρωθεί οι δείκτες Είναι η πιο πάνω σειρά των δύο συνθηκών ορθή; Καλύπτει και τις περιπτώσεις μονοψήφιων αριθμών; Ορθή σειρά συνθηκών της σύζευξης 1. Δεν έχουν διασταυρωθεί οι δείκτες, δηλαδή υπάρχει επιπλέον αντιστοιχία ψηφίων για σύγκριση 2. Τα εν λόγω ψηφία είναι όμοια Ακολουθιακή ερμηνεία των συνθηκών της λογικής έκφρασης Η άρνηση της πρώτης συνθήκης (δηλαδή οι δείκτες έχουν διασταυρωθεί) υποδηλώνει ότι ο Ν είναι Palindrome, ενώ η άρνηση της δεύτερης συνθήκης (δηλαδή τα εν λόγω αντίστοιχα στοιχεία δεν είναι τα ίδια) υποδηλώνει ότι ο Ν δεν είναι Palindrome

Ξετύλιγμα Επανάληψης σε Ακολουθία (αναθέσεων) Palindrome(696) (3 1) and (6 = 6) (2 2) and (9 = 9) (1 3) false true true left 3; right 1 left 2; right 2 left 1; right 3 return(left < right) true Palindrome(3163) (4 1) and (3 = 3) (3 2) and (1 = 6) true false left 4; right 1 left 3; right 2 return(left < right) false

// iterative definition of Palindrome public static boolen Palindrome (long N){ int left = Length(N), right = 1; while (left >= right && Digit(N,left) == Digit(N,right)){ left = left 1; right = right + 1; return left < right;

υπερφόρτωση public class BaseLib long convert (long n, int b) ο δεκαδικός n σε βάση b long convert (long n, int from, int to) ο n από βάση from σε βάση to ο δεκαδικός n σε δυαδική βάση ο δεκδικός n σε οκταδική βάση long binary (long n) long octal (long n) long ToDecimal (int b, long n) ο n από βάση b σε δεκαδική βάση boolean valid_num (int b,long n) είναι ο n έγκυρος στη βάση b; API για τη βιβλιοθήκη μας BaseLib, η οποία ορίζει συναρτήσεις για τη μετατροπή φυσικών αριθμών σε άλλες βάσεις από το 2 μέχρι το 9

public class BaseLib { // Implementing BaseLib // recursive definition for convert public static long convert (long n, int b){ if (n < b) return n; else return CardLib.AddDigit(convert(n/b, b), n%b); public static long convert (long n, int from, int to){ if (from == to) return n; else if (from == 10) return convert(n, to); else if (to == 10) return ToDecimal(from, n); else return convert(todecimal(from, n), to); public static long binary (long n){return convert(n, 2); public static long octal (long n) {return convert(n,8); public static long ToDecimal (int b, long n){ long i = 1, res = 0; while (n > 0){ res = res + i * CardLib.LastDigit(n); i = i * b; n = CardLib.RestDigits(n); ; return res; ΙVX-52 Η BaseLib είναι client της CardLib (βρίσκονται στον ίδιο φάκελος εργασίας)

// Implementing BaseLib public static boolean valid_num(int base, long num){ if (num < 0) return false; else {while (num > 0) if (CardLib.LastDigit(num) >= base) return false; else num = CardLib.RestDigits(num); return true; public static void main(string[] args){ // code for testing BaseLib