ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ ΕΡΓΑΣΤΗΡΙΟ 2 Θέμα εργαστηρίου: Κλάσεις, μέθοδοι και δηλώσεις ανάθεσης Περιεχόμενο εργαστηρίου: Εισαγωγή στις κλάσεις, στα είδη μεθόδων και στα αντικείμενα Μαθηματικές εκφράσεις της Math class Δηλώσεις ανάθεσης τιμών σε μεταβλητές Πρόγραμμα: Στο σημερινό εργαστήριο θα δημιουργηθεί ένα πρόγραμμα που με δεδομένη θερμοκρασία και σχετική υγρασία του περιβάλλοντος, θα υπολογίζει την «ισοδύναμη θερμοκρασία», που είναι η θερμοκρασία την οποία αισθάνεται ο ανθρώπινος οργανισμός ( equivalent temperature ή heat index ). Στοιχεία φυσικού αντικειμένου προγράμματος: Ο ανθρώπινος οργανισμός ανταλλάσει θερμότητα με το περιβάλλον με i) απλή επαγωγή (ζεσταίνοντας τον αέρα που έρχεται σε επαφή με το σώμα), ii) εξάτμιση του ιδρώτα και iii) ανταλλαγή θερμικής ακτινοβολίας (π.χ. θέρμανση από τον ήλιο). Ισοδύναμη θερμοκρασία (Equivalent temperature ή heat index) του αέρα ονομάζεται η εικονική θερμοκρασία του αέρα που θα προκαλούσε τον ίδιο ρυθμό ανταλλαγής θερμότητας εάν συνέβαιναν μόνο τα φαινόμενα της επαγωγής και της ανταλλαγής ακτινοβολίας (δηλ. χωρίς το φαινόμενο της εξάτμισης). Η υγρασία καθυστερεί την απώλεια θερμότητας από το σώμα μειώνοντας την εξάτμιση του ιδρώτα, άρα αέρας με μεγαλύτερη υγρασία έχει μεγαλύτερη ισοδύναμη θερμοκρασία. Η ισοδύναμη θερμοκρασία του αέρα δίνεται από την ακόλουθη σχέση: όπου: T air είναι η θερμοκρασία του αέρα γ είναι μία παράμετρος (ψυχρομετρική σταθερά) με τιμή γ = 66 Pa/K (Pascal ανά βαθμό Kelvin) σχέση: p w είναι η πραγματική μερική πίεση ατμών του αέρα (σε Pa), η οποία δίνεται από τη Page 1 of 5
όπου: φ είναι η σχετική υγρασία του αέρα (0 1) p ws είναι η κορεσμένη μερική πίεση ατμών του αέρα (σε Pa), η οποία δίνεται από τη σχέση: όπου Τ είναι η θερμοκρασία του αέρα σε βαθμούς Kelvin ( o K = o C + 273.15 ), ενώ οι παράμετροι Α 1 Α 7 έχουν τις ακόλουθες τιμές: Α 1 = 5.8002206 10 3 Α 2 = 1.3914993 Α 3 = 48.640239 10 3 Α 4 = 41.764768 10 6 Α 5 = 14.452093 10 9 Α 6 = 0 Α 7 = 6.5459673 Δομή του προγράμματος Το πρόγραμμα θα αποτελείται από δύο κλάσεις: την κλάση εφαρμογής (CalcEquivTemp) και μία κλάση υποστήριξης (EquivTemp). Όλοι οι απαραίτητοι υπολογισμοί θα γίνονται σε μεθόδους της κλάσης υποστήριξης, ενώ η κλάση εφαρμογής θα αναλαμβάνει την είσοδο των δεδομένων, την κλήση των απαραίτητων μεθόδων και την έξοδο (στην οθόνη) των αποτελεσμάτων. Η κλάση υποστήριξης θα περιέχει τις ακόλουθες μεθόδους: i) Modifier methods (τροποποιητικές): setairtemp: θέτει τιμή στη μεταβλητή της θερμοκρασίας setrhpercent: θέτει τιμή στη μεταβλητή της σχετικής υγρασίας ii) Operations methods (λειτουργικές): convertctok: μετατρέπει τους βαθμούς Κελσίου σε βαθμούς Κέλβιν convertrh: μετατρέπει το ποσοστό της σχετικής υγρασίας σε δεκαδικό (0 1) calcsatvaporpressure: υπολογίζει την κορεσμένη μερική πίεση ατμών (σε kpa) calcactualvaporpressure: υπολογίζει την πραγματική μερική πίεση ατμών (σε kpa) calcet: υπολογίζει την ισοδύναμη θερμοκρασία (σε o C) iii) Accessor methods (πρόσβασης): accesssatvappress: επιστρέφει την κορεσμένη μερική πίεση ατμών (σε kpa) accessvappress: επιστρέφει την πραγματική μερική πίεση ατμών (σε kpa) accesset: επιστρέφει την ισοδύναμη θερμοκρασία (σε o C) Η κλάση εφαρμογής θα περιέχει μόνο τη μέθοδο main η οποία θα ζητάει από τον χρήστη την είσοδο τιμών για θερμοκρασία και σχετική υγρασία, θα καλεί τις απαραίτητες μεθόδους της κλάσης υποστήριξης (αφού φτιάξει ένα αντικείμενό της) ώστε να υπολογίσει την ισοδύναμη θερμοκρασία, και θα εμφανίζει στην οθόνη τα αποτελέσματα (τις τιμές εισόδου (θερ/σία, υγρασία), την τιμή της πραγματικής μερικής πίεσης ατμών και τέλος την τιμή της ισοδύναμης θερμοκρασίας). Page 2 of 5
Σκελετός του προγράμματος Ακολουθεί ο σκελετός της κλάσης υποστήριξης (EquivTemp), δηλαδή το κύριο μέρος της κλάσης με τις απαραίτητες μεταβλητές και τις μεθόδους της, αλλά χωρίς τον κώδικα της κάθε μεθόδου. Αφού γραφεί ο σκελετός αυτός της κλάσης στον BlueJ και αφού διαπιστωθεί ότι γίνεται compiled χωρίς να βρίσκει συντακτικά λάθη (μπορεί να βρίσκει άλλα σφάλματα, π.χ. ότι λείπει κάποιο return κτλ., αλλά με ενδιάμεσο compilation μπορούμε να διορθώσουμε τυχόν συντακτικά λάθη πριν το πρόγραμμα γίνει πολύ μεγάλο και πολύπλοκο), θα πρέπει να συμπληρωθεί ο κώδικας των μεθόδων, για να ολοκληρωθεί η κλάση υποστήριξης. Προσοχή: Από τον ορισμό των modifier μεθόδων της κλάσης γίνεται σαφές ότι οι μέθοδοι αυτές δεν επιστρέφουν κάποια τιμή, αλλά θέτουν τιμές σε μεταβλητές της κλάσης. Επίσης, από τον ορισμό των operations μεθόδων της κλάσης γίνεται σαφές ότι οι μέθοδοι αυτές δεν δέχονται κάποιες τιμές, αλλά χρησιμοποιούν τιμές των μεταβλητών της κλάσης για να υπολογίσουν τις τιμές άλλων μεταβλητών. /** * Write a description of class EquivTemp here. * * @author (your name) * @version (a version number or a date) */ public class EquivTemp // variables private double CtoK = 273.15; // constant, convert Celsius to Kelvin private double airtempc; // air temperature, in Celcius private double airtempk; // air temperature, in Kelvin private double rhumidity; // relative humidity, 0 to 1 private double rhumiditypercent; // relative humidity, percent // προσθέστε και άλλες μεταβλητές εάν χρειάζεται // Modifier methods to receive values and assign them to class variables // Μέθοδος που δέχεται τιμή για τη θερμοκρασία και την // αναθέτει στη μεταβλητή κλάσης public void setairtemp(double temp) // Μέθοδος που δέχεται τιμή για τη σχετ. υγρασία (%) και την // αναθέτει στη μεταβλητή κλάσης public void setrhpercent(double rh) Page 3 of 5
// Operations methods to calculate intermediate results // Μέθοδος που μετατρέπει βαθμούς Κελσίου σε Κέλβιν public void convertctok() // Μέθοδος που μετατρέπει τη σχετ. υγρασία από ποσοστό σε δεκαδικό public void convertrh() // Μέθοδος που υπολογίζει την κορεσμένη πίεση ατμών, σε kpa public void calcsatvaporpressure() // Μέθοδος που υπολογίζει την πραγματική πίεση ατμών, σε kpa public void calcactualvaporpressure() // Μέθοδος που υπολογίζει την ισοδύναμη θερμοκρασία, σε C public void calcet() // Accessor methods to return calculated and other values // to invoking statements // Μέθοδος που επιστρέφει την κορεσμένη πίεση ατμών public double accesssatvappress() // Μέθοδος που επιστρέφει την πραγματική πίεση ατμών public double accessvappress() // Μέθοδος που επιστρέφει την ισοδύναμη θερμοκρασία public double accesset() // end class Page 4 of 5
Αφού ολοκληρωθεί η κλάση υποστήριξης, μένει να φτιαχτεί η κλάση εφαρμογής του προγράμματος (CalcEquivTemp). Ο σκελετός της κλάσης αυτής φαίνεται παρακάτω. Ξανά, αφού γραφεί ο σκελετός αυτός της κλάσης στον BlueJ και αφού διαπιστωθεί ότι γίνεται compiled χωρίς να βρίσκει συντακτικά λάθη, θα πρέπει να συμπληρωθεί ο κώδικας που λείπει, για να ολοκληρωθεί η κλάση εφαρμογής, και άρα το πρόγραμμα. /** * Write a description of class CalcEquivTemp here. * * @author (your name) * @version (a version number or a date) */ public class CalcEquivTemp // Data variables private static double tempc; private static double percentrh; public static void main(string [] args) // Δημιουργία αντικειμένων της Scanner και της // κλάσης υποστήριξης // Ask user for input data (temperature and rel. humidity (%) // Κλήση μεθόδων της κλάσης υποστήριξης για τον υπολογισμό // των αποτελεσμάτων // ΠΡΟΣΟΧΗ: ΕΧΕΙ ΜΕΓΑΛΗ ΣΗΜΑΣΙΑ Η ΣΕΙΡΑ ΚΛΗΣΗΣ ΤΩΝ ΜΕΘΟΔΩΝ! // Output results (θα χρειαστούν κλήσεις των accessor // methods της κλάσης υποστήριξης) // end main // end class Αφού ολοκληρώσετε και τις δύο κλάσεις (υποστήριξης και εφαρμογής) και βεβαιωθείτε ότι έχουν γίνει compiled χωρίς σφάλματα, τρέξτε την κλάση εφαρμογής. Δοκιμάστε το πρόγραμμά σας για διάφορες τιμές θερμοκρασίας και σχετικής υγρασίας. Κάποιες ενδεικτικές τιμές (αποτελεσμάτων) για δεδομένα ζεύγη θερμοκρασίας/υγρασίας, για να τεστάρετε το πρόγραμμά σας είναι οι εξής: Θερ/σία (C) Υγρασ. (%) Κορ. πίεση ατμ. (kpa) Πραγμ. πίεση ατμ. (kpa) Ισοδ. θερ/σία (C) 20 20 2.33880370 0.46776074 27.08728394 20 80 2.33880370 1.87104296 48.34913576 30 25 4.24603024 1.06150756 46.08344789 Σημείωση: Ο συγκεκριμένος τρόπος υπολογισμού της ισοδύναμης θερμοκρασίας παράγει σχετικά υψηλές τιμές. Άλλες μέθοδοι υπολογίζουν πιο ρεαλιστικές τιμές ισοδύναμης θερ/σίας, αλλά ο συγκεκριμένος τρόπος έχει μεγαλύτερο ενδιαφέρον από προγραμματιστικής άποψης, γι αυτό και χρησιμοποιήθηκε σε αυτή την άσκηση. 031408 Page 5 of 5