ΟΜΑΔΑ Α. ΓΕΝΙΚΕΣ ΕΡΩΤΗΣΕΙΣ 119 έως 224

119. Διατυπώστε τον κώδικα για ένα script που θα τυπώσει ένα HTML table με 7 σειρές και 6 στήλες. Σε κάθε κελί θα υπάρχει και ένας αριθμός σε αύξουσα σειρά από το 1 ως το 42. Ο πίνακας θα είναι κεντραρισμένος στην σελίδα, με border 1 και padding 4. Η στοίχιση μέσα στα κελιά θα είναι κεντρική και κάθε έβδομος αριθμός (7,14,21...) θα είναι έντονος (bold) και θα έχει χρώμα κόκκινο.

<html>

<body>

<script>

document.write('<table>');

var i,j,num=0;

for (i = 0; i < 7; i++) {

num++;

document.write('<tr><td> <font color="red"> <b>'+num+'</b></font></td>');

for (j=2; j<7; j++) {

num++;

document.write('<td>'+num+'</td>');

}

document.write("</tr>");

}

document.write('</table>');

</script>

</body>

</html>


120. Στείλτε ένα email σε όλες τις εγγραφές του πίνακα subscribers χρησιμοποιώντας τη συνάρτηση mail (to, subject, body). Το email θα έχει θέμα "Login info" και περιεχόμενο "Your username is <το username χρήστη> and your password is <το password χρήστη> ". Δεν απαιτείται ο κώδικας σύνδεσης με τον (My)Sql server. Ο πίνακας subscribers έχει τα πεδία id, username, password, email.

<?php

$servername = "localhost";

$username = "username";

$password = "password";

$dbname = "myDB";

$subject = "Login info";

// Create connection

$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection

if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

}

$sql = "SELECT id, username, password, email FROM subscribers";

$result = $conn->query($sql);

if ($result->num_rows > 0) {

// output data of each row

while($row = $result->fetch_assoc()) {

$body = "Your username is" . $row["username"] . "and your password is" . $row["password"];

mail($row["email"], $subject, $body);

}

} else {

echo "0 results";

}

$conn->close();

?>


121. Ποιές είναι οι σημάνσεις HTML (<σήμανση>), όπως εμφανίζονται στον επιλογέα σήμανσης του Dreamweaver, α) για ένα πίνακα, β) για μια γραμμή πίνακα, γ) για ένα κελί πίνακα, και δ) για μια κεφαλίδα πίνακα; Αναφέρατε μόνο τον κώδικό σήμανσης για την κάθε μια από τις τέσσερις περιπτώσεις.

<table>

<tr>

<td>

<th>

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

Πίνακες HTML

Οι πίνακες στην html ορίζονται με τις ετικέτες table, tr και td οι οποίες όλες μαζί έχουν την ακόλουθη δομή:

<table>

<tr>

<td>1.1</td>

<td>1.2</td>

<td>1.3</td>

</tr>

<tr>

<td>2.1</td>

<td>2.2</td>

<td>2.3</td>

</tr>

</table>

 Οι ετικέτες <table> και </table> ορίζουν την αρχή και τον τερματισμό του πίνακα. Κάθε γραμμή του πίνακα ορίζεται από τις ετικέτες <tr> και </tr>. Στο συγκεκριμένο παράδειγμα βλέπουμε 2 ζευγάρια αυτών των ετικετών, δηλαδή 2 γραμμές. Σε κάθε μια γραμμή έχουμε 3 κελιά κάθε ένα από τα οποία ορίζεται με τις ετικέτες <td> και </td>. Στην ουσία οι ετικέτες αυτές ορίζουν τις στήλες του πίνακα. Για τον λόγο αυτόν βλέπουμε μεταξύ των ετικετών γραμμών, tr, να ορίζονται 3 κελιά με τις ετικέτες td.

1.1 1.2 1.3

2.1 2.2 2.3

Σε έναν πίνακα μπορούμε να ορίσουμε τα κελιά, td, μιας γραμμής, tr, ως επικεφαλίδες. Αυτό γίνεται με την χρήση της ετικέτας <th> στην θέση της ετικέτας <td>. Η μορφοποίηση της γραμμής-επικεφαλίδας είναι κεντραρισμένο κείμενο με έντονη γραφή. Στο ακόλουθο παράδειγμα παρατηρήστε την χρήση του th ως ετικέτα επικεφαλίδας:

<table>

<tr>

<th scope="col">Όνομα</th>

<th scope="col">Επίθετο</th>

<th scope="col">Βαθμός</th>

</tr>

<tr>

<td>Γιώργος</td>

<td>Γεωργόπουλος</td>

<td>14</td>

</tr>

<tr>

<td>Γιάννης</td>

<td>Γιαννόπουλος</td>

<td>16</td>

</tr>

</table>

if ($result->num_rows > 0) {

// output data of each row

while($row = $result->fetch_assoc()) {

$body = "Your username is" . $row["username"] . "and your password is" . $row["password"];

mail($row["email"], $subject, $body);

}

} else {

echo "0 results";

}

$conn->close();

?>

Στην πρώτη γραμμή του πίνακα, η οποία ορίζεται από το πρώτο ζευγάρι tr, χρησιμοποιείται η ετικέτα th ως επικεφαλίδα.

Όνομα Επίθετο Βαθμός

Γιώργος Γεωργόπουλος 14

Γιάννης Γιαννόπουλος 16

122. Γιατί είναι προτιμότερο να ορίζω το στυλ των ιστοσελίδων μου (CSS) σε ένα εξωτερικό αρχείο παρά να εισάγω το στυλ εσωτερικά σε κάθε μια ιστοσελίδα; Ποιό είναι το πρόβλημα με την χρήση εσωτερικών (inline) στυλ;

Είναι προτιμότερο να ορίζω το στυλ των ιστοσελίδων μου (CSS) σε ένα εξωτερικό αρχείο γιατί έχουμε:

  • Πλήρη έλεγχο της δομής της σελίδας.
  • Ευκολότερη συντήρηση της ιστοσελίδας μας.
  • Λιγότερο χρόνο loading της σελίδας λόγω του ότι το css γίνεται cached στον browser.
  • Μεγαλύτερο page ranking(SEO Friendly).

Τα προβλήματα που προκύπτουν με την χρήση εσωτερικού στυλ είναι ύ στυλ είναι ότι:

  • Mπορεί να κάνει override που εμείς δεν θέλουμε λόγω αλληλουχίας
  • Πρέπει να γράφουμε το στυλ για κάθε element π Πρέπει να γράφουμε το στυλ για κάθε element που θέλουμε να προσθέσουμε. ουμε να προσθέσουμε.
  • Δεν μπορούμε να βάλουμε στυλ σε ψευδο-elements.
  • Μεγαλώνει πολύ το html αρχείο μας.

Τι είναι το CSS (Cascading Style Sheet) και με ποιούς τρόπους μπορεί να ενσωματωθεί σε μια ιστοσελίδα;  

Το πρότυπο css είναι μία γλώσσα υπολογιστή που ανήκει στην κατηγορία των γλωσσών φύλλων στυλ που χρησιμοποιείται για την εύκολη μαζική μορφοποίηση μια ιστοσελίδας ή ολόκληρου ιστοτόπου.

Υπάρχουν δύο τρόποι να εισάγουμε αυτό το πρότυπο.

Στον πρώτο τρόπο οι εντολές css ενσωματώνονται στο html αρχείο. Οι κατάλληλες εντολές περιλαμβάνονται ανάμεσα στους κωδικούς:

Όλο αυτό το τμήμα θα πρέπει να περιλαμβάνεται μεταξύ των κωδικών <HEAD> και </HEAD> του αρχείου html.

<STYLE TYPE="TEXT/CSS">

και

</STYLE> .

Στο δεύτερο τρόπο, δημιουργούμε ένα ξεχωριστό αρχείο με τις κατάλληλες εντολές, το οποίο και καλείται από τα αρχεία html. Σ' αυτήν την περίπτωση, στο αρχείο html εισάγουμε, πάλι μεταξύ <HEAD> και </HEAD>, την εντολή:

<LINK REL="stylesheet" TYPE="TEXT/CSS" href="/filename.css">

όπου τώρα το αρχείο filename.css περιέχει απλά τις εντολές, με την ίδια μορφή που έχουν όταν ενσωματώνονται στο html αρχείο.

Εισαγωγή στο CSS   pages.cs.aueb.gr/courses/epl131/files/CSS_notes.pdf

Μπορούμε να εισάγουμε CSS στη σελίδα μας με τρεις διαφορετικούς τρόπους, αναλόγως την περίπτωση. Οι τρόποι αυτοί, κατά σειρά φθίνουσα προτεραιότητας, είναι:

Inline CSS: Αν επιθυμούμε να μορφοποιήσουμε ένα στοιχείο μόνο, και δεν πρόκειται να χρειαστούμε αυτό το είδος μορφοποίησης για τίποτε άλλο στο site, μπορούμε να γράψουμε «χύμα» (δηλ. χωρίς το κομμάτι του CSS selector και χωρίς αγκύλες) CSS properties μέσα στο attribute style, το οποίο το διαθέτει σχεδόν κάθε στοιχείο html. Παραδείγματος χάριν, για να κάνουμε μια συγκεκριμένη παράγραφο κόκκινη,μπορούμε να προσθέσουμε style="color:red;" στο <p> tag (ολοκληρωμένα: <p style="color:red;">).

Αξίζει να σημειωθεί, ότι αν κάποιες από τις ιδιότητες που θα γράψουμε εντός της attribute style ενός στοιχείου «συγκρούονται» με κανόνες CSS που έχουν οριστεί για αυτό αλλού και το αφορούν, τότε ο browserθα επιλέξει να εφαρμόσει αυτά που γράψαμε εντός του attribute style, ως πιο συγκεκριμένα για το στοιχείο αυτό.

CSS για μια συγκεκριμένη σελίδα: Πολλές φορές, μπορεί να θέλουμε να εφαρμόσουμε κάποιους κανόνες CSSμόνο για τη συγκεκριμένη σελίδα και όχι για όλο το site (ή να διαφοροποιήσουμε σε κάποιες ιδιότητες τους υπάρχοντες). Ένας τρόπος να το κάνουμε αυτό, για να μην δημιουργήσουμε ξεχωριστό αρχείο CSS είναι να εισάγουμε εντός των tags <head>...</head> της σελίδας τους κανόνες CSS μας μέσα σε <style> tags(με την html attribute type τους σε text/css). Παραδείγματος χάριν, για να κάνουμε το χρώμα γραμμάτων μιας συγκεκριμένης σελίδας γκρι, θα γράφαμε στο head της:

<style type="text/css">

body

{

color:gray;

}

</style>

Αξίζει να σημειωθεί ότι συνήθως όταν ξεκινάμε την ανάπτυξη ενός site, είναι πιο βολικό να χρησιμοποιήσουμε αυτό τον τρόπο αρχικά, μιας και πρέπει να επεξεργαζόμαστε μόνο ένα αρχείο αντί για δύο. Όταν τελειώνουμε την πρώτη σελίδα, συνήθως μεταφέρουμε το CSS που έχουμε γράψει σε εξωτερικό αρχείο (βλ. παρακάτω) ώστε να μπορούμε να χρησιμοποιήσουμε τους ίδιους κανόνες CSS και στις άλλες σελίδες του site μας, χωρίς να πρέπει φυσικά να τους κάνουμε copy‐paste σε κάθε σελίδα.

Εξωτερικό αρχείο CSS: Η πιο «σωστή» χρήση του CSS και αυτή που θα έπρεπε να είναι η πρώτη λύση στην οποία θα καταφύγουμε, είναι η χρήση εξωτερικού αρχείου CSS. Για να τη χρησιμοποιήσουμε, γράφουμε τους κανόνες CSS μας σε ένα αρχείο με επέκταση css (πχ main.css) και στο head της κάθε σελίδας του site μας γράφουμε <link href="main.css" type="text/css" /> (αν το όνομα του αρχείου CSS είναι main.css, αλλιώς προφανώς γράφουμε το σωστό όνομα αρχείου). Αξίζει να σημειωθεί ότι μπορούμε να έχουμε πολλά αρχεία css στην ίδια σελίδα, και μεγαλύτερη προτεραιότητα έχει πάντα αυτό που έχει γραφτεί τελευταίο.

123 (Cascading Style Sheet); Περιγράψτε ποιος είναι ο ρόλος του κάθε τύπου. Δώστε ένα παράδειγμα για κάθε τύπο.

cascade - αλληλουχία style -μορφή sheet -φύλλο

• HTML Selector: Για να καθορίσουμε τον τρόπο με τον οποίο μια συγκεκριμένη ετικέτα
HTML θα πρέπει να είναι (στυλ) σε ολόκληρη την ιστοσελίδα μας, χρησιμοποιήστε τον
επιλογέα HTML. Για παράδειγμα, εάν θέλουμε όλες οι ετικέτες επιπέδου κεφαλίδας 2 (h2)
πρέπει να είναι κόκκινες:h2{color:red}.
• Class Selector: Αν δεν θέλoυμε όλες οι ετικέτες μας να εμφανίζονται ακριβώς ίδιες,
χρειαζόμαστε χρειαζόμαστε έναν επιλο έναν επιλογέα που μπο που μπορεί να εφαρμοστεί εφαρμοστεί σε οποιαδήποτε σε οποιαδήποτε ετικέτα ετικέτα HTML.
Αυτός είναι ο επιλογέας class. Κατά τον ορισμό μιας class, τοποθετούμε μια τελεία αμέσως
πριν από το όνομα της class για να γνωρίζει το πρόγραμμα περιήγησης ότι πρόκειται για
class selector.Αν θέλαμε να κάνουμε το background-color κίτρινο χρησιμοποιώντας class
θα γράφαμε:
CSS
.example{background-color:yellow;}
HTML
<h2 class="example">text</h2>
• ID Selector: Το πρώτο πράγμα που πρέπει να γνωρίζουμε για τον ID Selector είναι ότι,
χρησιμοποιείται αυτός ο επιλογέας μόνο μια φορά σε μια ετικέτα HTML και λειτουργεί
ακριβώς όπως ο Class Selector. Η μόνη προφανής διαφορά είναι ότι, στην αρχή,
χρησιμοποιείτε ένα # για να το δηλώσουμε, αντί μιας τελείας. Αν θέλαμε ένα text να έχει
χρώμα πράσινο με την χρήση του ID Se χρώμα πράσινο με την χρήση του ID Selector θα γράφα lector θα γράφαμε:
CSS
#example{color:green;}
HTML
<div>text</div>

Which CSS entities participate in the cascade

..................................

Cascading Style Sheet

Τι είναι το CSS

Το CSS σημαίνει Cascading Style Sheets, που σημαίνει Cascading Style Sheets. Χρησιμοποιείται για τη διακόσμηση ιστοσελίδων. Εάν το HTML περιέχει περιεχόμενο (τι θα εμφανίσει το πρόγραμμα περιήγησης), τότε το CSS καθορίζει την εμφάνισή του (πώς θα το εμφανίσει το πρόγραμμα περιήγησης). Η ομορφιά του CSS είναι ότι με τη βοήθεια ενός στυλ μπορείτε να σχεδιάσετε όλα τα στοιχεία του ίδιου τύπου μιας σελίδας ή ενός ολόκληρου ιστότοπου ταυτόχρονα (όλοι οι σύνδεσμοι, οι παράγραφοι, οι λίστες ταυτόχρονα). Με ένα στυλ CSS, ορίζετε μία φορά πώς πρέπει να μοιάζει ένα συγκεκριμένο στοιχείο, για παράδειγμα, εικόνες και αλλάζουν την εμφάνισή τους σε όλα τα έγγραφα ταυτόχρονα. Για να αλλάξετε τη μορφοποίηση του κειμένου σε ολόκληρο τον ιστότοπό σας, χρειάζεται μόνο να αλλάξετε τον κώδικα CSS μία φορά.


124. Περιγράψτε πώς, με τη βοήθεια σχετικού εργαλείου, μπορείτε να εισάγετε σε μια ιστοσελίδα έναν πίνακα δύο στηλών (η πρώτη πλάτους 100 pixels και η δεύτερη πλάτους 300 pixels) και τριών γραμμών, στοιχισμένο στο κέντρο.

  • Αποθηκεύουμε το αρχείο με κατάληξη .html (πχ. test.html)
  • Για να δούμε το αποτέλεσμα ανοίγουμε το αρχείο html με ένα browser(chrome,mozilla,IE)

2ος τρόπος:Χρησιμοποιούμε dreamweaver

Ανοίγουμε το dreamweaver,από το menu πατάμε Εισαγωγή->πίνακας και στο παράθυρο που ανοίγει βάζουμε τις τιμές που επιθυμούμε.

125. Περιγράψτε πώς με τη χρήση σχετικού εργαλείου, μπορείτε να δημιουργήσετε IMAGE HOTSPOTS, να εισάγετε ένα JAVA APPLET και πώς μπορείτε να εισάγετε μια αριθμημένη λίστα σε μια ιστοσελίδα. Ποιους άλλους τύπους λίστας μπορείτε να εισάγετε και με ποιο τρόπο;

Για να δημιουργήσουμε ένα image hotspot μέσα στο tag <img> βάζουμε το attribute usemap="#name"Μετά ορίζουμε το map μας:

<map name="name">

<area shape="circle" cords="90,58,3 href="example.htm" alt="Example"

</map>

Για να εισάγουμε ένα java applet στην σελίδα μας χρησιμοποιούμε το tag <applet>Για να εισάγουμε ένα applet το οποίο θα ζωγραφίζει φούσκες ο κώδικας μας θα ήταν έτσι:<applet code="Bubbles.class"

width="400px" height="200">Example applet that draws bubbles</applet>

Για την εισαγωγή αριθμημένης λίστας χρησιμοποιούμε το attribute type στο tag <ol>:

<ol type="1">

<li>Example1</li>

<li>Example2</li>

</ol> Ο κώδικας αυτός θα δημιουργήσει: 1.Example1 2.Example2

Άλλοι τύποι λιστών είναι: Αρίθμηση με κεφαλαία γράμματα(type="A"),αρίθμηση με πεζά γράμματα(type="a"),αρίθμηση με κεφαλαίους λατινικούς αριθμούς(type="I") και αρίθμηση με πεζούς λατινικούς αριθμούς(type="i").

Επίσης άλλος τρόπος εισαγωγής αποτελεί η λίστα περιγραφής (Descri ption List).Η ετικέτα <dl> ορίζει τη λίστα περιγραφής, η ετικέτα <dt> ορίζει τον όρο (όνομα) και η ετικέτα <dd> περιγράφει κάθε όρο:

<dl>

<dt>Example></dt>

<dd>this is an example</dd>

</dl>

126. Τι είναι τα «ερωτήματα» (queries) στο σχεσιακό μοντέλο Βάσεων δεδομένων;

Τα ερωτήματα είναι εντολές που υποβάλλονται προς τη βάση δεδομένων. Χρησιμοποιούνται για την ενημέρωση και διαχείριση των σχεσιακών βάσεων δεδομένων. Για τη σύνταξη των ερωτημάτων χρησιμοποιείται η γλώσσα SQL. 

Εισαγωγή στις Βάσεις Δεδομένων 

Βάση Δεδομένων: μια μεγάλη συλλογή δεδομένων, μοντελοποιεί μια επιχείρηση του πραγματικού κόσμου. Οντότητες (πχ. Φοιτητές, Μαθήματα) Συσχετίσεις (πχ. Ο Γιάννης παρακολουθεί το Β18) 

Το σχεσιακό μοντέλο Το πιο διαδεδομένο μοντέλο ΒΔ σήμερα. Βασικό δομικό στοιχείο: η σχέση Είναι ένα σύνολο εγγραφών. Ή επίσης ένας πίνακας με στήλες και σειρές. Κάθε σχέση έχει το δικό της σχήμα, που περιγράφει τις στήλες του πίνακα, ή αλλιώς τα πεδία. Περιορισμοί ορθότητας εξασφαλίζουν συνθήκες για τις εγγραφές. 

Τα queries είναι ερωτήματα προς μια βάση δεδομένων. Στις σχεσιακές βάσεις δεδομένων υλοποιούνται με μια γλώσσα ερωταποκρίσεων που ονομάζεται SQL (συντομογρ. του όρου Structured Qeury Language).

Κάθε ερώτημα επεξεργάζεται από το σύστημα διαχείρισης της βάσης και συναρτήσει των δεδομένων που υπάρχουν στους πίνακες εξάγει κάποιες πληροφορίες. Η δομή και το συντακτικό της SQL ορίζεται από τον οργανισμό ANSI. Υπάρχουν πολλές παραλλαγές της SQL ανάλογα με τον κατασκευαστή της εκάστοτε βάσης δεδομένων.

Στο σχεσιακό μοντέλο βάσης δεδομένων, οι αντίστοιχες πράξεις της σχεσιακής άλγεβρας υλοποιούνται με χρήση ερωτημάτων. Οι βασικές πράξεις της σχεσιακής αλγεβρας είναι η επιλογή, η προβολή, η ένωση, η διαφορά και το καρτεσιανό γινόμενο.

127. Τι είναι ένα σύστημα διαχείρισης βάσης δεδομένων;

Σύστημα Διαχείρισης Βάσεων Δεδομένων (DBMS) είναι ένα σύνολο προγραμμάτων που επιτρέπουν το χειρισμό των πληροφοριών μιας ή περισσοτέρων Βάσεων Δεδομένων που δημιουργήθηκαν από το ίδιο σύστημα. Τα συστήματα αυτά, δίνουν γενικής χρήσης εργαλεία που επιτρέπουν τη δημιουργία και τον χειρισμό πληροφοριών. 

Το σχεσιακό μοντέλο δεδομένων

Εισαγωγή στα Συστήματα Βάσεων Βάσεις Δεδομένων 2013-2014 Ευαγγελία Πιτουρά 1 Δεδομένων

Σύστημα Διαχείρισης Βάσεων Δεδομένων (ΣΔΒΔ) Database Management System (DBMS) λογισμικό (σύνολο από προγράμματα) για δημιουργία και χρήση μιας βάσης δεδομένων.

Βάση Δεδομένων: συλλογή από σχετιζόμενα δεδομένα.

Ένα σύστημα διαχείρισης βάσης δεδομένων (ΣΔΒΔ) (database management system (DBMS)) αποτελείται από ένα σύνολο δεδομένων και προγράμματα πρόσβασης στα δεδομένα αυτά. Το σύνολο των δεδομένων καλείται βάση δεδομένων (database). Στόχος του ΣΔΒΔ είναι η εύκολη και γρήγορη χρήση και ανάκτηση των δεδομένων. Η διαχείριση των δεδομένων περιλαμβάνει:
  • τον ορισμό δομών για τη αποθήκευση των δεδομένων
  • τον ορισμό μεθόδων για τη διαχείριση των δεδομένων
Ο ορισμός της δομής της βάσης δεδομένων βασίζεται σε ένα μοντέλο δεδομένων το οποίο ορίζει τον τρόπο που περιγράφονται τα δεδομένα, οι σχέσεις τους, η σημασία τους και οι περιορισμοί πάνω στα δεδομένα αυτά.

Το σχεσιακό μοντέλο (relational model) δεδομένων παριστάνει δεδομένα και τις σχέσεις τους ως ένα σύνολο πινάκων. Κάθε πίνακας (table) αποτελείται από στήλες (columns) με μοναδικά ονόματα. Μια γραμμή (row) του πίνακα παριστάνει μια σχέση (relationship) ανάμεσα σε ένα σύνολο από τιμές. Ο πίνακας που ακολουθεί παριστάνει έναν τηλεφωνικό κατάλογο. Αποτελείται από δύο στήλες και πέντε γραμμές. 

Η SQL (structured query language) αποτελεί σήμερα την πιο διαδεδομένη γλώσσα διαχείρισης σχεσιακών βάσεων δεδομένων. Η SQL παρέχει δυνατότητες για:

  • τον ορισμό, τη διαγραφή και τη μεταβολή πινάκων και κλειδιών,
  • τη σύνταξη ερωτήσεων (queries),
  • την εισαγωγή, διαγραφή και μεταβολή στοιχείων,
  • τον ορισμό όψεων (views) πάνω στα δεδομένα,
  • τον ορισμό δικαιωμάτων πρόσβασης,
  • τον έλεγχο της ακεραιότητας των στοιχείων,
  • τον έλεγχο συναλλαγών (transaction)

Η SQL είναι ορισμένη ως διεθνές πρότυπο. Ένα υποσύνολο της SQL υποστηρίζεται από την βάση δεδομένων Microsoft Access.

128. Τι χρησιμοποιούμε προκειμένου να απεικονίσουμε τον πραγματικό κόσμο σ' ένα μοντέλο, το οποίο εύκολα μεταφράζεται σε Σύστημα Διαχείρισης Βάσης Δεδομένων (ΣΔΒΔ);

Στην περίπτωση των σχεσιακών βάσεων δεδομένων, οι πληροφορίες συνδέονται μεταξύ τους με ΣΧΕΣΕΙΣ που απορρέουν από τα κοινά πεδία διαφορετικών αρχείων. Σε αυτό το είδος Βάσεων Δεδομένων, τα αρχεία λέγονται "tables" (πίνακες), τα records "rows" (γραμμές) και τα πεδία "columns" (στήλες). 

Μοντελοποίηση 

129. Εξηγήστε τι σημαίνει ότι «μία σχέση οντοτήτων είναι ένα προς πολλά». Δώστε ένα παράδειγμα.

Μία συσχέτιση είναι "Ένα - προς - Πολλά" όταν κάθε μέλος της πρώτης συνδέεται με οποιοδήποτε αριθμό μελών της δεύτερης, ενώ κάθε μέλος της δεύτερης συνδέεται το πολύ με ένα μέλος της πρώτης. Έτσι σχέση "Ένα - προς - Πολλά" έχουμε όταν το πρωτεύον κλειδί ενός πίνακα αντιστοιχεί σε πολλές εγγραφές σε έναν άλλο πίνακα. Παραδείγματα σχέσης "Ένα - προς - Πολλά" είναι: Πελάτης - Παραγγελίες του πελάτη Μαθητής - Βαθμοί του μαθητή Κάθε προμηθευτής προμηθεύει πολλά προϊόντα και κάθε προϊόν προμηθεύεται από έναν μόνο προμηθευτή.

Μοντέλο Οντοτήτων Συσχετίσεων aesop.iep.edu.gr/node/6730/1768

Στοιχεία Θεωρίας Σχεδιασμού Σχεσιακών Βάσεων Δεδομένων 

Μοντέλο Οντοτήτων-Συσχετίσεων

 Ενδεικτικές λύσεις ασκήσεων

130. Τι είναι λειτουργικές εξαρτήσεις (functional dependecies); Ποιες μορφές λειτουργικών εξαρτήσεων γνωρίζετε;

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

Τετριμμένη λειτουργική Εξάρτηση (→) έχουμε όταν μία στήλη εξαρτάται από το κλειδί ενός στήλη εξαρτάται από το κλειδί ενός πίνακα. πίνακα. Π.χ. Από τον κωδικό του υπαλλήλου καθορίζονται μοναδικά το επίθετο και το όνομα του υπαλλήλου. Emp_no→emp_lname

Εξάρτηση πολλαπλών τιμών (→ →) έχουμε όταν η τιμή μίας στήλη μπορεί να καθορίζει το αντίστοιχο σύνολο τιμών άλλης στήλης ή στηλών. Π.χ. Ο κωδικός ISBN του βιβλίου καθορίζει πάντα όλους τους συγγραφείς του. Έτσι η ιδιότητα authros έχει εξάρτηση πολλαπλών τιμών από την ιδιότητα isbn. ητα isbn. Isbn→→authors

H θεωρία των λογικών εξαρτήσεων χρησιμοποιείται για την εξάλειψη του πλεονασμού δεδομένων σε έναν πίνακα (κανονικοποίηση). 

131. Ποια είναι τα στάδια ανάπτυξης μίας βάσης δεδομένων;

Ανάλυση απαιτήσεων ● Εννοιολογική σχεδίαση ● Λογική Σχεδίαση Βάσης ● Εκλέπτυνση Σχήματος ● Φυσικός Σχεδιασμός Βάσης ● Υλοποίηση Εφαρμογής και Μηχανισμών Ασφάλειας

132. Tί σημαίνει ο ορισμός Supertype και τι Subtype; Δώστε ένα παράδειγμα για τον κάθε ορισμό.

Το Supertype είναι ένας τύπος οντότητας που έχει σχέσεις (σχέση parent-child) με έναν ή περισσότερους subtypes και περιέχει ιδιότητες που είναι κοινές μεταξύ τους. Τα Subtype υποομάδες της οντότητας Supertype και έχουμε μοναδικά χαρακτηριστικά αλλά είναι ξεχωριστά από κάθε subtype.

133. Τι ονομάζουμε κανονικοποίηση μιας βάσης δεδομένων και πότε λέμε ότι μία σχέση ή πίνακας βρίσκεται σε πρώτη κανονική μορφή;

Κανονικοποίηση δεδομένων είναι μια διαδικασία κατά την οποία οι πίνακες αναδομούνται σε πολλαπλούς μέχρι να εξαλειφθούν οι εξαρτήσεις μεταξύ των στηλών του. Στόχος της κανονικοποίησης είναι η εξάλειψη του πλεονασμού των δεδομένων σε έναν πίνακα. Ένας πίνακας βρίσκεται σε 1η Κανονική Μορφή (1st Normal Form) όταν: ● Όλα τα records έχουν τα ίδια πεδία. ● Κανένα πεδίο δεν περιλαμβάνει υπο - πεδία. ● Δεν υπάρχουν επαναλήψεις πεδίων. ● Τα παραπάνω τα επιβάλει το ΣΔΒΔ (DBMS).

134. Εξηγήστε την οργάνωση αρχείων με δείκτη «index» σε ένα σύστημα διαχείρισης βάσεων δεδομένων.

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

135. Τι είναι «πρωτεύον κλειδί» (primary key) και τί «εξωτερικό κλειδί» (foreign key) στο σχεσιακό μοντέλο βάσεων δεδομένων;

Το πρωτεύον κλειδί (Primary Key), είναι ένα πεδίο ή ο ελάχιστος αριθμός πεδίων που μας επιτρέπουν τη μονοσήμαντη αναγνώριση κάθε πλειάδας σε έναν πίνακα. Για παράδειγμα, σε έναν πίνακα που περιέχει τα στοιχεία των μαθητών ενός σχολείου, το πρωτεύον κλειδί είναι ο αριθμός του μητρώου κάθε μαθητή, αφού βάσει αυτού μητρώου κάθε μαθητή, αφού βάσει αυτού μπορούμε να α μπορούμε να αναφερθούμε μονοσήμαντα σε κάθε μαθητή. ναφερθούμε μονοσήμαντα σε κάθε μαθητή. Το εξωτερικό κλειδί (Foreign Key), είναι ένα πεδίο ή συνδυασμός πεδίων ενός πίνακα που αντιστοιχούν στο πεδίο ή στα πεδία του πρωτεύοντος κλειδιού ενός άλλου πίνακα. Το ξένο κλειδί καθορίζει το είδος της συσχέτισης των πινάκων, αφού τα δεδομένα του ξένου κλειδιού πρέπει να ταιριάζουν με τα δεδομένα του πρωτεύοντος.

136. Ποιους τύπους δεδομένων υποστηρίζει η γλώσσα προγραμματισμού σχεσιακών βάσεων δεδομένων SQL;

NUMBER VARCHAR2 DATE

137. Εξηγήστε πότε λέμε ένα ότι ένα σύστημα βάσεων δεδομένων λειτουργεί σε περιβάλλον πολλαπλών χρηστών.

Ένα σύστημα βάσεων δεδομένων λειτουργεί σε περιβάλλον πολλαπλών χρηστών όταν: ● Εξυπηρετεί πολλούς χρήστες ταυτόχρονα (multi-user). ● Λειτουργεί σε περιβάλλον δικτύου και στο μοντέλο πελάτη-εξυπηρετητή (client-server). ● Αποθηκεύει τα δεδομένα σε ένα server ή σε κατανεμημένους servers που είναι προσβάσιμοι από όλους τους χρήστες. ● Διασφαλίζεται η εξουσιοδοτημένη πρόσβαση και η ακεραιότητα των δεδομένων.

138. Εξηγήστε τι είναι τα κατανεμημένα συστήματα βάσεων δεδομένων (distributed database systems).

Οι κατανεμημένες Βάσεις Δεδομένων είναι ειδικές Β.Δ., στις οποίες τα δεδομένα είναι αποθηκευμένα σε ξεχωριστές τοπικές Βάσεις που επικοινωνούν με μια κεντρική βάση. Στην κεντρική βάση βρίσκεται η συνολική πληροφορία για τη δομή της ως αυτόνομη οντότητα, ωστόσο η πληροφορία βρίσκεται στις τοπικές βάσεις δεδομένων. Σε κάθε ερώτημα προς την κεντρική βάση, αυτή επικοινωνεί με τις τοπικές βάσεις, προκειμένου να συλλέξει τη ζητούμενη πληροφορία. Οι τοπικές βάσεις μπορεί να είναι του ίδιου τύπου (ομοιογενείς ΚΒΔ) ή διαφορετικού τύπου (ετερογενείς ΚΒΔ). Πλεονεκτήματα: ● Κατανομή του έργου σε πολλούς υπολογιστές ● Ασφάλεια σε περίπτωση βλάβης. ● Μικρός χρόνος απόκρισης για τα τοπικά δεδομένα. Μειονεκτήματα: ● Δεν υπάρχει κεντρικός έλεγχος. ● Κίνδυνος να κλαπούν δεδομένα. ● Μεγάλος χρόνος απόκρισης για μη τοπικά δεδομένα.

139. Εξηγήστε τι ονομάζουμε ανοικτά συστήματα διασύνδεσης βάσεων δεδομένων, όπως τα συστήματα που υποστηρίζουν το «Open Database Connectivity (ODBC)».

Ο όρος «ανοικτά συστήματα» υποδηλώνει κατά βάση την ανεξαρτησία από συγκεκριμένο προμηθευτή και την υποχρεωτική χρήση προτύπων (Standards) που διασφαλίζουν: ● την αρμονική συνεργασία και λειτουργία μεταξύ συστημάτων και λειτουργικών εφαρμογών διαφορετικών προμηθευτών ● την μέσω δικτύων συνεργασία και εφαρμογών που βρίσκονται σε διαφορετικά υπολογιστικά συστήματα ● τη μεταφερσιμότητα των εφαρμογών ● τη δυνατότητα αύξησης του μεγέθους των μηχανογραφικών συστημάτων χωρίς αλλαγές στη δομή και τη φιλοσοφία.

140. Τι σημαίνει «Ακεραιότης Αναφορών-Referential Integrity»; Δώστε ένα παράδειγμα.

Ακεραιότητα Αναφοράς (Referential Integrity) είναι ο κανόνας των σχεσιακών βάσεων δεδομένων που επιβάλλει ότι όταν γίνονται μεταβολές στα περιεχόμενα της βάσης, δε διαταράσσεται η ακεραιότητα των υφιστάμενων σχέσεων μεταξύ των πινάκων της βάσης. Έτσι για παράδειγμα, όταν σβήνεται ένα πρωτεύον κλειδί, πρέπει να σβηστούν και οι εγγραφές που το περιέχουν σαν εξωτερικό κλειδί, αλλιώς οι εγγραφές αυτές θα είναι ασύνδετες.

Παραδείγματα:

Έχουμε την οντότητα πελάτες και την οντότητα παραγγελίες. Κάθε παραγγελία περιέχει τον κωδικό του πελάτη που έκανε την παραγγελία.

Όταν καταχωρείται η παραγγελία θα πρέπει να ελέγχεται αν έχει ήδη καταχωρηθεί ο πελάτης, αλλιώς να μη γίνεται δεκτή.

Αν διαγραφεί ο πελάτης, τότε οι παραγγελίες του θα περιέχουν έναν κωδικό πελάτη που δεν αντιστοιχεί σε κανέναν υπαρκτό πελάτη. Αυτό μπορεί να δημιουργήσει πολλά προβλήματα, όταν για παράδειγμα τυπωθεί το τιμολόγιο της παραγγελίας, ενώ δε θα υπάρχουν τα στοιχεία του πελάτη.

Οι λύσεις είναι δύο, ή δε θα σβήνονται οι πελάτες, ή ό πελάτης, ή όταν σβήνονται, θα πρέπει ταυτόχρονα να σβήνονται και οι παραγγελίες τους.

141. Να αναφέρετε τα μοντέλα βάσεων δεδομένων που γνωρίζετε και ποιες είναι οι διαφορές τους.

Τα τρία μοντέλα Βάσεων Δεδομένων είναι:

Hierarchical (Ιεραρχικό), Network (Δικτυωτό), Relational (Σχεσιακό)

ΙΕΡΑΡΧΙΚΟ: Σε αυτές τις ΒΔ οι πληροφορίες αναπαρίστανται με Δενδρικής μορφής δομές δεδομένων και συνδέονται μεταξύ τους με συνδέσμους "links".

ΔΙΚΤΥΩΤΟ: Η διαφορά των Δικτυωτών βάσεων από τις Ιεραρχικές είναι ότι στις πρώτες κάποιο record μπορεί να έχει ακαθόριστο αριθμό πατρικών (parent) records.

ΣΧΕΣΙΑΚΟ: Στην περίπτωση των σχεσιακών βάσεων δεδομένων, οι πληροφορίες συνδέονται μεταξύ τους με σχέσεις που απορρέουν από τα κοινά πεδία διαφορετικών αρχείων. Σε αυτό το είδος Βάσεων Δεδομένων, τα αρχεία λέγονται "tables" (πίνακες), τα records "rows" (γραμμές) και τα πεδία "columns" (στήλες).

142. Εξηγήστε τι είναι «γλώσσα χειρισμού δεδομένων» (Data Manipulation Language) και τι «γλώσσα ορισμού δεδομένων» (Data Definition Language), τα δυο βασικά τμήματα που χωρίζεται η γλώσσα διαχείρισης βάσεων δεδομένων SQL.

Γλώσσα χειρισμού δεδομένων (DML) είναι το σύνολο των εντολών της SQL που αφορούν τη διαχείριση των δεδομένων μας. Αυτές οι εντολές αφορούν την αναζήτηση εγγραφών / πεδίων (select),τη διαγραφή (delete), την ενημέρωση (update) και την εισαγωγή (insert).

Γλώσσα ορισμού δεδομένων (DDL) είναι το σύνολο των εντολών της SQL που αφορούν τη δημιουργία του σχήματος της βάσης. Αυτές οι εντολές, αφορούν τη δημιουργία / τροποποίηση /δημιουργία του σχήματος της βάσης, συνώνυμων, όψεων, χρηστών κ.α.

Η Γλώσσα SQL   https://delab.csd.auth.gr/~tiakas/SQL-gray.pdf

143. Ποιοι είναι οι τρεις πρώτοι κανόνες κανονικοποίησης; Δώστε ένα παράδειγμα για τον κάθε ένα από αυτούς.

Για το παράδειγμα θα χρησιμοποιήσουμε έναν πίνακα με τα πεδία: ΚΩΔΙΚΟΣ ΜΑΘΗΤΗ,ΟΝΟΜΑ,ΕΠΩΝΥΜΟ,ΗΜ. ΓΕΝΝΗΣΗΣ,ΣΥΜΒΟΥΛΟΣ,ΤΗΛ ΣΥΜΒΟΥΛΟΥ,ΚΩΔΙΚΟΣ ΜΑΘΗΜΑΤΟΣ 1,ΠΕΡΙΓΡΑΦΗ ΜΑΘΗΜΑΤΟΣ 1,ΚΩΔΙΚΟΣ ΜΑΘΗΜΑΤΟΣ2,ΠΕΡΙΓΡΑ ΜΑΘΗΜΑΤΟΣ2,ΠΕΡΙΓΡΑΦΗ ΜΑΘΗΜΑΤΟΣ2.

1ος κανόνας κανόνας κανονικοποίησης: Στην πρώτη μορφή κανονικοποίησης βρίσκεται μια σχέση όταν: κάθε όνομα γνωρίσματος(στήλης) είναι μοναδικό, όλες οι τιμές κάθε γνωρίσματος είναι ίδιου τύπου, κάθε τιμή γνωρίσματος είναι ατομική,τα γνωρίσματα δεν έχουν διάταξη από αριστερά προς τα δεξιά, οι συστοιχίες δεν έχουν διάταξη από πάνω προς τα κάτω, δεν υπάρχουν 2 ίδιες συστοιχίες σε μία σχέση.Έστω ότι έχουμε έναν πίνακα ΜΑΘΗΜΑΤΑ ο οποίος είναιι σε μέσα σε έναν άλλον πίνακα ΜΑΘΗΤΕΣ. .

Σε αυτόν τον κανόνα,κάθε τιμή γνωρίσματος είναι ατομική αλλά επειδή πολλά πεδία είναι επαναλαμβανόμενα καταχωρούνται σε ένα πεδίο το ΜΑΘΗΜΑ(ομάδα πολλών τιμών).Έτσι αυτά έρχονται σε σύγκρουση με τον πρώτο κανόνα κανονικοποίησης άρα,διασπάμε τον αρχικό πίνακα σε δυο ξεχωριστους (ΜΑΘΗΜΑ,ΜΑΘΗΤΕΣ)

2ος κανόνας κανονικοποίησης: Σε 2η μορφή κανονικοποίησης βρίσκεται μια σχέση εάν είναι σε 1η μορφή κανονικοποίησης και επιπλέον κάθε γνώρισμα που δεν είναι κλειδί εξαρτάται ολόκληρο από το πρωτεύον κλειδί και όχι από ένα τμήμα του. Στο παράδειγμα μας με τους πίνακες ΜΑΘΗΤΕΣ, ΜΑΘΗΜΑ,στο πίνακα μαθημάτων θα δημιουργήσουμε ένα πρωτεύων κλειδί που θα συνδυάζει τον ΚΩΔΙΚΟ ΜΑΘΗΤΗ+ΚΩΔΙΚΟΣ ΜΑΘΗΜΑΤΟΣ. Ο ΚΩΔΙΚΟΣ ΜΑΘΗΤΗ δεν θα είναι μοναδικό κλειδί από μόνο του στον πίνακα γιατί ένας μαθητής μπορεί να έχει πολλά μαθήματα. Ανάλογα τον ΚΩΔΙΚΟ ΜΑΘΗΜΑΤΟΣ δεν θα είναι μοναδικό κλειδί από μόνο του σε αυτόν τον πίνακα,γιατί ένα μάθημα μπορεί να το έχουν πολλοί μαθητές. Έτσι τα πεδία μας ΠΕΡΙΓΡΑΦΗ ΜΑΘΗΜΑΤΟΣ,ΕΚΠΑΙΔΕΥΤΗΣ ΜΑΘΗΜΑΤΟΣ είναι τα ίδια για κάθε μάθημα(εξαρτώνται μόνο από τον κωδικό Μαθητή) ανεξάρτητα από τον σπουδαστή που παίρνει το μάθημα.

3ος κανόνας κανονικοποίησης: Μια σχέση βρίσκεται σε 3η μορφή κανονικοποίησης εάν είναι σε δεύτερη και δεν περιέχει μεταβατικές συναρτήσεις. Το πεδίο ΤΗΛ ΣΥΜΒΟΥΛΟΥ δεν περιέχει πληροφορίες για τον μαθητή άρα πρέπει να δημιουργήσουμε ξεχωρ ουμε ξεχωριστό πίνακα για τους Σύμβουλους.

144. Τί είναι το Μοντέλο Οντοτήτων Συσχετίσεων(ΜΟΣ); Παρουσιάστε σχηματικά πώς απεικονίζονται στο ΜΟΣ οι οντότητες (entity), οι ιδιότητες των οντοτήτων (attributes), τα πρωτεύοντα κλειδιά (primary key) και οι σχέσεις (relation type και identifying relationship type).

Είναι ένα μοντέλο σχεδίασης το οποίο το χρησιμοποιούμε για να περιγράψουμε με γραφικά σύμβολα τα δεδομένα ως οντότητες, συσχετίσεις και γνωρίσματα αυτών. Χρησιμοποιείται κατά το στάδιο του εννοιολογικού σχεδιασμού της ΒΔ. Σχηματικά,οι οντότητες «μπαίνουν» σε ένα παραλληλόγραμμο,οι ιδιότητες αυτών σε έναν κύκλο,τα πρωτέυων κλειδιά υπογραμμίζονται και οι σχέσεις «μπαίνουν» σε ένα ρόμβο.

145. Έχουμε δύο οντότητες: Η μία είναι Πολίτης και η άλλη Πόλη. Για αυτές τις δύο οντότητες αναπαραστήστε σχηματικά, με τη βοήθεια της γλώσσας ERDish, τις ακόλουθες σχέσεις: 1. Κάθε Άτομο πρέπει να έχει γεννηθεί μόνο σε μία Πόλη / Κάθε Πόλη μπορεί να είναι γενέτειρα ενός ή περισσότερων Πολιτών 2. Κάθε Πολίτης πρέπει να έχει μόνιμη κατοικία σε μία μόνο Πόλη / Κάθε Πόλη μπορεί να είναι ο τόπος κατοικίας ενός ή περισσότερων Πολιτών 3. Κάθε Πολίτης μπορεί να είναι επισκέπτης μίας ή περισσοτέρων Πόλεων / Κάθε Πόλη πρέπει να την έχει επισκεφθεί ένας ή περισσότεροι Πολίτες.


146. Αναλύστε τις βασικές διαφορές μεταξύ C και C++, όσον αφορά στα χαρακτηριστικά που προσθέτει η C++.

  • Ορισμοί μεταβλητών μπορούν να δοθούν σε οποιοδήποτε σημείο
  • Σχόλια της μιας γραμμής μπορούν να οριστούν με τους χαρακτήρες //
  • Μεταβλητές μπορούν να οριστούν ως αναφορά
  • Συναρτήσεις μπορούν να οριστούν πολυμορφικά
  • Οι δηλώσεις δομών ορίζουν αυτόματα και έναν νέο τύπο
  • Οι τελεστές new και delete[] δεσμεύουν και ελευθερώνουν και μνήμη
  • Στα ορίσματα των συναρτήσεων μπορούν να δωθούν αρχικές τιμές
  • Ορίζεται ο τύπος bool για λογικές μεταβλητές

Η C είναι μια γλώσσα προγραμματισμού γενικής χρήσης, που δημιουργήθηκε αρχικά για συστήματα Unix. Χρησιμοποιείται συνήθως σε συστήματα cross-platform, για κωδικοποίηση συστημάτων Unix, παιχνιδιών και ειδικών εφαρμογών (automotive, ενσωματωμένα συστήματα, ρομποτική κτλ.). Επιλέγεται πιο συχνά, επειδή είναι πιο συμπαγής από την C++ και τρέχει πιο γρήγορα. Είναι, η δεύτερη πιο συνηθισμένη γλώσσα προγραμματισμού ακολουθώντας την Java. Η C αποτελεί τη βάση για να δημιουργηθούν πολλές άλλες γλώσσες προγραμματισμού συμπεριλαμβανομένων των C#, Java, JavaScript, Perl, PHP και Python.

Διαδικαστικός προγραμματισμός η γλώσσα C

γλώσσα προγραμματισμού υψηλού επιπέδου, η γλώσσα C. Ο όρος γλώσσα υψηλού επιπέδου υποδηλώνει ότι δεν είναι κατασκευασμένη για να λειτουργεί σε συγκεκριμένη αρχιτεκτονική υπολογιστή, αλλά δύναται να λειτουργήσει σε πληθώρα αρχιτεκτονικών 

Για να είναι μία γλώσσα συμβατή με τις γλώσσες μηχανής διάφορων αρχιτεκτονικών, θα πρέπει να λαμβάνει χώρα μεταγλώττιση από τη γλώσσα προγραμματισμού στην εκάστοτε γλώσσα μηχανής. Όντως αυτό συμβαίνει και το λογισμικό που επιτελεί τη συγκεκριμένη εργασία ονομάζεται μεταγλωττιστής (compiler). Με βάση τα παραπάνω, οι γλώσσες προγραμματισμού υψηλού επιπέδου είναι ως επί το πλείστον μεταγλωττισμένες γλώσσες, αποσκοπώντας στο να είναι ευανάγνωστες και κατανοητές.

Σε ό,τι αφορά τη C, παρουσιάζει μία σειρά από ενδιαφέροντα και χρήσιμα χαρακτηριστικά:  Μπορεί να χρησιμοποιηθεί και ως γλώσσα προγραμματισμού χαμηλού επιπέδου, επιτρέποντας άμεση πρόσβαση στους πόρους του υπολογιστή. -2-  Είναι σχετικά μικρή και εύκολη στην εκμάθηση.  Υποστηρίζει δομημένο προγραμματισμό.  Είναι αποτελεσματική, παράγοντας συμπαγή και γρήγορα στην εκτέλεση προγράμματα.  Έχει φορητότητα, δηλαδή ο κώδικάς της μεταγλωττίζεται από διάφορους μεταγλωττιστές χωρίς να απαιτούνται τροποποιήσεις.  Μετά από τέσσερις και πλέον δεκαετίες συνεχίζει να αποτελεί μία από τις ευρύτερα χρησιμοποιούμενες γλώσσες προγραμματισμού, γεγονός που έχει δημιουργήσει πολύ μεγάλη εγκατεστημένη βάση εφαρμογών που αναπτύχθηκαν με αυτήν τη γλώσσα και πρέπει να συντηρούνται και να εξελίσσονται.  Αποτελεί μία εξαιρετική εκκίνηση για την εκμάθηση γλωσσών που στηρίζονται στον αντικειμενοστραφή προγραμματισμό (C++, Java, C#), καθώς ο τελευταίος έχει δανειστεί πολλά χαρακτηριστικά από τη C. 

Ωστόσο, η γλώσσα C παρουσιάζει και μία σειρά μειονεκτημάτων, που την καθιστούν απαιτητική στον χειρισμό. Παρέχοντας μεγάλο βαθμό ελευθερίας στον προγραμματιστή και χαρακτηριζόμενη από έλλειψη περιορισμών και μικρό βαθμό ελέγχου λαθών, υποχρεώνει τον προγραμματιστή να είναι ιδιαίτερα προσεκτικός και να χρησιμοποιεί διαδικασίες ελέγχου λαθών, οι οποίες παρέχονται αυτόματα σε άλλες γλώσσες προγραμματισμού. Επιπλέον, σε πολλές περιπτώσεις εισάγονται λάθη που είναι μη ανιχνεύσιμα από τον μεταγλωττιστή και οδηγούν σε καταστάσεις απροσδιοριστίας, δηλαδή μη αναμενόμενες καταστάσεις με μη προσδιορισμένη συμπεριφορά.  

Η C δεν διαθέτει κάποιες από τις δυνατότητες νεώτερων γλωσσών, όπως τον προσανατολισμό στα αντικείμενα και την συλλογή απορριμάτων (garbage collection) 

Η C++ είναι μια γλώσσα προγραμματισμού μέσου επιπέδου που είναι αντικειμενοστρεφής. Προέρχεται από τη C, ωστόσο, έχει πρόσθετα και βελτιώσεις που την καταστά μια πιο πολυεπίπεδη γλώσσα προγραμματισμού. Είναι κατάλληλη για μεγάλα project, καθώς μπορεί να σπάσει σε τμήματα που επιτρέπουν την εύκολη συνεργασία. Χρησιμοποιείται από τις πιο γνωστές εταιρείες τεχνολογίας στον κόσμο, συμπεριλαμβανομένων των Adobe, Google, Mozilla και Microsoft. 

 10 γλώσσες προγραμματισμού

Εισαγωγή - Η γλώσσα C++

Η C++ είναι μια γλώσσα που έχει προέλθει από τη C.
Πλεονεκτήματά της σε σχέση με τη C είναι:
η δυνατότητα οργάνωσης δεδομένων σε μια κλάση (class),
ο ορισμός κληρονομικότητας (inheritance) στη δομή των κλάσεων,
η δυνατότητα αρχικοποίησης δεδομένων,
ο ορισμός μεταβλητών ως αναφορά (reference) σε κάποια άλλη,
ο πολυμορφικός (polymorphic) καθορισμός συναρτήσεων με βάση τον τύπο του ορίσματός τους,
η υπερφόρτωση (overloading) τελεστών,
η πλούσια βιβλιοθήκη βασικών δομών δεδομένων και
η δυνατότητα ορισμού πολυμορφικών βασικών τύπων με βάση ένα πρότυπο (template).
Τα παραπάνω στοιχεία επιτρέπουν στη γλώσσα να υποστηρίζει τον αντικειμενοστρεφή προγραμματισμό (object-oriented programming).

Υπάρχουν παρόλ' αυτά εφαρμογές οι οποίες γράφονται καλύτερα σε C. Τέτοιες είναι:

  • προγράμματα που έχουν άμεση σχέση με το υλικό όπως ο πυρήνας του λειτουργικού συστήματος και οι οδηγοί συσκευών,
  • ενσωματωμένες (embedded) εφαρμογές που εκτελούνται σε περιβάλλον που δεν μπορεί να ανταποκριθεί στις απαιτήσεις της C++.

147. Ποια είναι η διαφορά μεταξύ του αντικειμένου και της κλάσης; Δώστε ένα παράδειγμα.

Η διαφορά είναι ότι το αντικείμενο (object) είναι το στιγμιότυπο μίας κλάσης, δηλαδή αυτή καθαυτή η δομή δεδομένων (με αποκλειστικά δεσμευμένο χώρο στη μνήμη) βασισμένη στο «καλούπι» που προσφέρει η κλάση. Παραδείγματος χάρη, σε μία αντικειμενοστρεφή γλώσσα προγραμματισμού θα μπορούσαμε να ορίσουμε κάποια κλάση ονόματι BankAccount, η οποία αναπαριστά έναν τραπεζικό λογαριασμό, και να δηλώσουμε ένα αντικείμενο της με όνομα MyAccount. Το αντικείμενο αυτό θα έχει δεσμεύσει χώρο στη μνήμη με βάση τις μεταβλητές και τις μεθόδους που περιγράψαμε όταν δηλώσαμε την κλάση. Έτσι, στο αντικείμενο θα μπορούσε να περιέχεται ένα γνώρισμα Balance (=υπόλοιπο) και μία μέθοδος GetBalance (=επίστρεψε το υπόλοιπο). Ακολούθως θα μπορούσαμε να δημιουργήσουμε ακόμα ένα ή περισσότερα αντικείμενα της ίδιας κλάσης τα οποία θα είναι διαφορετικές δομές δεδομένων (διαφορετικοί τραπεζικοί λογαριασμοί στο παράδειγμα). Τα αντικείμενα μίας κλάσης μπορούν να προσπελάσουν τα ιδιωτικά περιεχόμενα άλλων αντικειμένων της ίδιας κλάσης.

Μία Κλάση (Class) είναι ένα σύνολο δηλώσεων που αφορούν στην περιγραφή μιας συγκεκριμένης κατηγορίας αντικειμένων (object).

Δηλώνουμε μία Κλάση House ως εξής:

class House

{

String owner;

String address;

int post_code;

float sq_metres;

}

Στο παραπάνω παράδειγμα η Κλάση House ορίζει όλες τις παραμέτρους που χρειάζονται για να προσδιορίσουμε ένα αντικείμενο της συγκεκριμένης κλάσης. Δηλαδή:

Τον ιδιοκτήτη του σπιτιού

Τη διεύθυνση

Τον ταχυδρομικό κώδικα

Το εμβαδόν

Ένα αντικείμενο (object) αποτελεί μία εκδοχή μιας συγκεκριμένης κλάσης (class instance). Έτσι σύμφωνα με το παραπάνω παράδειγμα θα μπορούσαμε να είχαμε τα παρακάτω αντικείμενα:

Μία Κλάση στην ουσία αποτελεί τη μήτρα για να παραχθούν συγκεκριμένου τύπου αντικείμενα 

148. Ποιες είναι οι διαφορές μεταξύ του δομημένου προγραμματισμού και του προγραμματισμού οδηγούμενου από γεγονότα;

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

149. Αναφέρετε τι καθορίζει η κλάση (class) ενός αντικειμένου και τι το στιγμιότυπο (instance) ενός αντικειμένου σε μια αντικειμενοστραφή γλώσσα προγραμματισμού

Στον αντικειμενοστραφή προγραμματισμό όλα είναι αντικείμενα και χρησιμοποιούνται για αποθήκευση δεδομένων όπως και για την εκτέλεση υπολογισμών πάνω σε δεδομένα.. Τα αντικείμενα λένε το ένα στο άλλο τι να κάνει µέσω ανταλλαγής μηνυμάτων. Για να εγερθεί ένα αίτημα σε κάποιο αντικείμενο στέλνουμε ένα μήνυμα προς αυτό µε αποτέλεσμα την κλήση μιας συνάρτησης του αντικειμένου. αντικειμένου. Κάθε αντικείμενο έχει τη δική του μνήμη η οποία αποτελείται από άλλα αντικείμενα. Κάθε αντικείμενο είναι στιγμιότυπο μιας κλάσης (κλάση ≈ τύπος). Η κλάση καθορίζει τα χαρακτηριστικά και τις συμπεριφορές αντικειμένων: αντικείμενα της ίδιας κλάσης μπορούν να αποδεχθούν τα ίδια μηνύματα.

Μιά κλάση είναι μιά περιγραφή ενός τύπου αντικειμένου: περιγράφει τα χαρακτηριστικά καί τη συμπεριφορά του συγκεκριμένου τύπου αντικειμένου

Όλα τα αντικείμενα είναι στιγμιότυπα μιάς κλάσης

Η σχέση ενός αντικειμένου με μιά κλάση είναι παρόμοια με τη σχέση μιάς μεταβλητής με τον τύπο της μεταβλητής σε μιά γλώσσα προγραμματισμού

Μία κλάση είναι ένα πρότυπο για τη δημιουργία παρόμοιων αντικειμένων. • Μία κλάση είναι όπως ένα αρχιτεκτονικό σχέδιο: περιγράφει τις ιδιότητες ενός αντικειμένου • Όλα τα αντικείμενα σε μία κλάση έχουν τα ίδια χαρακτηριστικά, τις ίδιες μεθόδους αλλά όχι τις ίδιες τιμές. • Από μία κλάση μπορούν να δημιουργηθούν πολλάστιγμιότυπα (αντικείμενα)

150. Τι είναι ο constructor και τι ο destructor σε μια κλάση; Ποιος είναι ο λόγος χρήσης τους;

Σε κάθε κλάση μπορεί να οριστεί μια συνάρτηση κατασκευής (constructor ) με όνομα ίδιο με αυτό της κλάσης και μια συνάρτηση καταστροφής (destructor ) με όνομα το όνομα της κλάσης με το πρόθεμα ~. Η συνάρτηση κατασκευής καλείται κάθε φορά που δημιουργείται ένα νέο αντικείμενο (σε επίπεδο καθολικό, τοπικό, ή με new). Η συνάρτηση καταστροφής καλείται κάθε φορά που παύει να υπάρχει ένα αντικείμενο δηλαδή αντίστοιχα όταν τελειώνει το πρόγραμμα, όταν η ροή βγαίνει από το τοπικό τμήμα, ή καλείται η delete. Το όρισμα που δηλώνουμε στη συνάρτηση κατασκευής επιτρέπει προσδιορισμό ιδιοτήτων του αντικειμένου που δημιουργούμε (π.χ. τον αριθμό στοιχείων σε μια στοίβα) ή αρχικών τιμών. Η συνάρτηση καταστροφής δε δέχεται κάποιο όρισμα. Οι συναρτήσεις αυτές μπορούν να χρησιμοποιηθούν για να διαχειριστούν τη μνήμη αντικειμένων που απαιτούν τη χρήση δυναμικής μνήμης με κατάλληλες κλήσεις στις new και delete.

Εκτός απ'τις μεθόδους και τις μεταβλητές που ορίζουμε εμείς, κάθε Κλάση περιλαμβάνει και μία ειδική μέθοδο που αφορά ένα σύνολο εντολών το οποίο εκτελείται κάθε φορά που ένα νέο αντικείμενο δημιουργείται. Η ειδική αυτή μέθοδος καλείται constructor και ξεχωρίζει από τις υπόλοιπες μεθόδους της Κλάσης, αφού η ονομασία που της δίνουμε είναι αυτή της Κλάσης:

class Sphere

{

// Class variables

static final double PI = 3.14;

static int count = 0;

// Instance variables

double radius;

double xCenter;

double yCenter;

double zCenter;

//Class constructor

Sphere(double theRadius, double x, double y, double z)

{

radius = theRadius;

xCenter = x;

yCenter = y;

zCenter = z;

++count;

}

//static method

static int getCount()

{

return count;

}

//instance method

double volume()

{

return 4.0/3.0*PI*radius*radius*radius;

}

...

}

Η παραπάνω μέθοδος constructor κάθε φορά που θα καλείται για να δημιουργηθεί ένα αντικείμενο κλάσης Sphere,αφενός θα δίνει κάποιες τιμές στις μεταβλητές radius, xCenter, yCenter και zCenter για το κάθε αντικείμενο,αφετέρου θα αυξάνει την μεταβλητή κλάσης count κατά μία μονάδα. Επειδή όπως είδαμε και πριν μία μεταβλητή κλάσης μοιράζεται από όλα τα αντικείμενα της ίδιας Κλάσης, η μεταβλητή αυτή θα λειτουργεί σαν μετρητής: για κάθε νέο αντικείμενο που θα δημιουργείται θα προστίθεται σε αυτήν και μία μονάδα.

Πώς δημιουργούνται αντικείμενα από μια Κλάση; Όταν δηλώνουμε:

Sphere ball;

στην ουσία δεν δημιουργούμε κάποιο αντικείμενο. Απλώς δηλώνουμε πως δημιουργούμε την μεταβλητή ball η οποία θα αναφέρεται σε ένα αντικείμενο Κλάσης Sphere, όταν και όποτε αυτό δημιουργηθεί. Προκειμένου να δημιουργήσουμε ένα αντικείμενο κάνουμε χρήση της δήλωσης new ακολουθούμενο από την μέθοδο constructor με τα επιθυμητά ορίσματα:

ball = new Sphere(10.0, 1.0, 1.0, 1.0);

Οι παραπάνω δύο δηλώσεις, μπορούν να συμπτυχθούν σε μία:

Sphere ball = new Sphere(10.0, 1.0, 1.0, 1.0);

Μία Κλάση μπορεί να έχει πολλαπλούς constructors, καθένας απ'τους οποίους διαφοροποιείται απ'τους υπόλοιπους με βάση τα ορίσματα που χρησιμοποιεί. Έτσι, εκτός απ'το παραπάνω παράδειγμα μπορούμε να φτιάξουμε δύο ακόμη constructors, ο πρώτος εκ των οποίων δημιουργεί αντικείμενα μοναδιαίας ακτίνας (radius = 1) και ο δεύτερος επίσης μοναδιαίας ακτίνας και στην αρχή των αξόνων (0, 0, 0):

class Sphere

{

. . .

//Class constructor #1

Sphere(double theRadius, double x, double y, double z)

{

radius = theRadius;

xCenter = x;

yCenter = y;

zCenter = z;

++count;

}

//Class constructor #2

Sphere(double x, double y, double z)

{

radius = 1.0;

xCenter = x;

yCenter = y;

zCenter = z;

++count;

}

//Class constructor #3

Sphere()

{

radius = 1.0;

xCenter = 0.0;

yCenter = 0.0;

zCenter = 0.0;

++count;

}

. . .

}

με αντίστοιχες κλήσεις:

Sphere unaryBall = new Sphere(3.0, 4.0, 5.0);

Sphere originBall = new Sphere();

Όπου ανάλογα τα ορίσματα που δηλώνουμε καλείται ο αντίστοιχος constructor.

Στη C++, ό,τι αντικείμενο δημιουργούμε δυναμικά πρέπει να το καταστρέφουμε (συνήθως με την εντολή delete) ελευθερώνοντας όλους τους πόρους που δεσμεύσαμε κατά την ύπαρξή του (κλείσιμο αρχείων, αποσύνδεση από βάσεις δεδομένων, τερματισμός threads, αποδέσμευση μνήμης, κλπ). Η καταστροφή του αντικειμένου γίνεται καλώντας μια μέθοδο που καλείται καταστροφέας (destructor). Το όνομα του destructor είναι το ίδιο με της κλάσης προπορευόμενο από τον τελεστή ~. Δηλαδή για την κλάση Car, το όνομα του καταστροφέα είναι ~Car(). Ενώ ο δημιουργός είναι απαραίτητο να οριστεί τις περισσότερες φορές, δεν είναι πάντα απαραίτητος ο ορισμός του καταστροφέα. Κάτι τέτοιο έχει νόημα μόνο όταν στον δημιουργό πραγματοποιούμε κάποια δυναμική λειτουργία (άνοιγμα δικτυακής σύνδεσης, αρχείου, κλπ), και την οποία πρέπει να τερματίσουμε κατά την καταστροφή του αντικειμένου (π.χ. κλείσιμο αρχείου, τερματισμός σύνδεσης, κλπ) 

151. Δώστε τον ορισμό των πιο σημαντικών χαρακτηριστικών του αντικειμενοστραφούς προγραμματισμού: Ενθυλάκωση (Encapsulation), Πολυμορφισμός (Polymorphism), Κληρονομικότητα (Inheritance)

Κληρονομικότητα στον αντικειμενοστραφή προγραμματισμό αναφέρεται στη δυνατότητα επαναχρησιμοποίησης κώδικα από ήδη υπάρχοντα αντικείμενα, στη δημιουργία νέων αντικειμένων τα οποία μοιράζονται ιδιότητες με ήδη υπάρχοντα ή και τα δύο ανάλογα τη γλώσσα προγραμματισμού. Ένα αντικείμενο αποτελεί ένα στιγμιότυπο μιας κλάσης, οι κλάσεις μπορούν να κληρονομούν από άλλες κλάσεις τόσο τα γνωρίσματα όσο και τις μεθόδους.

Ενθυλάκωση δεδομένων (data encapsulation) καλείται η ιδιότητα που προσφέρουν οι κλάσεις να «κρύβουν» τα ιδιωτικά δεδομένα τους από το υπόλοιπο πρόγραμμα και να εξασφαλίζουν πως μόνο μέσω των δημόσιων μεθόδων τους θα μπορούν αυτά να προσπελαστούν. Αυτή η τακτική παρουσιάζει μόνο οφέλη καθώς εξαναγκάζει κάθε εξωτερικό πρόγραμμα να φιλτράρει το χειρισμό που επιθυμεί να κάνει στα πεδία μίας κλάσης μέσω των ελέγχων που μπορούν να περιέχονται στις δημόσιες μεθόδους της κλάσης.

Πολυμορφισμός είναι η δυνατότητα εκτέλεσης διαφορετικών λειτουργιών μιας μεθόδου που είναι κοινή σε διαφορετικές κλάσεις (συνήθως κλάση-γονέα και κλάση-παιδί), ανάλογα µε το αντικείμενο της κλάσης που την καλεί.

Encapsulation (Ενθηλάκωση) Οι διαδικασίες κρύβονται από το χρήστη και τα ίδια τα δεδομένα προσδιορίζουν τους τρόπους διαχείρισης τους.

Polymorphism (πολυμορφισμός) Αντικείμενα που ανήκουν σε παρόμοιες κλάσεις μπορούν να έχουν κοινό τρόπο προσπέλασης, με αποτέλεσμα ο χρήστης να μπορεί να τα χειριστεί με τον ίδιο τρόπο χωρίς να χρειάζεται να μάθει νέες διαδικασίες.

Inheritance (κληρονομικότητα) Μπορούμε να δημιουργήσουμε ένα νέο αντικείμενο παίρνοντας ως βάση ένα άλλο ήδη υπάρχον. Το νέο αντικείμενο θα έχει τα χαρακτηριστικά του παλιού ενώ θα μπορέι να τα τροποποιήσει, να τα επεκτείνει και να προσθέσει καινούρια για να καλύψει συγκεκριμένες ανάγκες.

Ενθυλάκωση ή Κελυφοποίηση ή απόκρυψη πληροφοριών (encapsulation) Η απόκρυψη των λεπτομερειών υλοποίησης ενός αντικειμένου (ελεγχόμενη ορατότητα των πεδίων και μεθόδων του αντικειμένου). Δημόσια (public) πεδία/μέθοδοι: αυτά που μπορούν να χρησιμοποιηθούν (κληθούν/ προσπελαστούν) από τα άλλα αντικείμενα. Ιδιωτικά (private) πεδία/μέθοδοι: αυτά που χρησιμοποιούνται μόνο από το ίδιο το αντικείμενο.

ΣΧΕΣΕΙΣ ΜΕΤΑΞΥ ΚΛΑΣΕΩΝ

Κληρονομικότητα ή γενίκευση (inheritance - generalization) Όταν μία κλάση αποδίδει σε μία άλλη κλάση τα χαρακτηριστικά της. Η πρώτη κλάση λέγεται κλάση-γονέας η δε δεύτερη κλάση-παιδί, και μπορεί να διαθέτει επιπλέον χαρακτηριστικά (πεδία και μεθόδους) από αυτά που κληρονομεί. Σε μία σχέση κληρονομικότητας με ένα μόνο γονέα έχουμε την απλή κληρονομικότητα (single inheritance), ενώ στην αντίθετη περίπτωση πολλαπλή κληρονομικότητα (multiple inheritance). Αν δούμε την κληρονομικότητα από την κλάση-παιδί προς την κλάση-γονέα, τότε παρατηρούμε ότι η κλάση-γονέας έχει λιγότερα χαρακτηριστικά από την κλάση-παιδί, δηλαδή αποτελεί γενίκευσή (generalization) της. Με την κληρονομικότητα έχουμε και τον ορισμό της επαναχρησιμοποίησης (δεδομένων και λειτουργιών).

Πολυμορφισμός (polymorphism) Πολυμορφισμός είναι η δυνατότητα εκτέλεσης διαφορετικών λειτουργιών μιας μεθόδου που είναι κοινή σε διαφορετικές κλάσεις (συνήθως κλάση-γονέα και κλάση-παιδί), ανάλογα με το αντικείμενο της κλάσης που την καλεί. Είναι μία σημαντική ιδιότητα του αντικειμενοστρεφούς προγραμματισμού που χρησιμοποιείται ευρέως στην επεκτασιμότητα των εφαρμογών.

152. Αναλύστε τις διαφορετικές τεχνικές προγραμματισμού procedural (διαδικαστικός), structured (δομημένος) και object-oriented (αντικειμενοστραφή).

Αντικειμενοστραφή προγραμματισμό (object-oriented programming), ονομάζουμε ένα προγραμματιστικό υπόδειγμα το οποίο εμφανίστηκε στα τέλη της δεκαετίας του 1960 και καθιερώθηκε κατά τη δεκαετία του 1990, αντικαθιστώντας σε μεγάλο βαθμό το παραδοσιακό υπόδειγμα του δομημένου προγραμματισμού. Πρόκειται για μία μεθοδολογία ανάπτυξης προγραμμάτων, υποστηριζόμενη από κατάλληλες γλώσσες προγραμματισμού, όπου ο χειρισμός σχετιζόμενων δεδομένων και των διαδικασιών που επενεργούν σε αυτά γίνεται από κοινού, μέσω μίας δομής δεδομένων που τα περιβάλλει ως αυτόνομη οντότητα με ταυτότητα και δικά της χαρακτηριστικά. Αυτή η δομή δεδομένων καλείται αντικείμενο και αποτελεί πραγματικό στιγμιότυπο στη μνήμη ενός σύνθετου, και πιθανώς οριζόμενου από τον χρήστη, τύπου δεδομένων τύπου δεδομένων ονόματι κλάση. Η κλάση προδιαγράφει τόσο δεδομένα όσο και τις διαδικασίες οι οποίες επιδρούν επάνω τους· αυτή υπήρξε η πρωταρχική καινοτομία του αντικειμενοστραφή προγραμματισμού.

153. Αναλύστε ποιός είναι ο ρόλος της οδηγίας #include <iostream>.

Το iostream είναι μέρος της πρότυπης βιβλιοθήκης της γλώσσας προγραμματισμού C++ για την είσοδο/έξοδο δεδομένων. Στην πραγματικότητα είναι ένα ψευδώνυμο (typedef) για την εξειδίκευση του πρωτύπου κλάσης basic_iostream basic_iostream για είσοδο - έξοδο δεδομένων σε μορφή char. Παράγεται με διπλή κληρονομικότητα από τα πρότυπα κλάσεων basic_ostream και basic_istream. Τα αρχικά io στο όνομα της βιβλιοθήκης αναφέρονται στις αγγλικές λέξεις Input/Output Stream που μεταφράζονται ως είσοδος/έξοδος ροής (stream) δεδομένων. Η βιβλιοθήκη iostream παρέχει την βασική είσοδο/έξοδο σε ένα πρόγραμμα της C++. Το cin είναι σε ένα πρόγραμμα της C++. Το cin είναι αντικείμενο αντικείμενο της istream (παράφραση του αγγλικού see-in που σημαίνει δες είσοδο), και τα cout (παράφραση του αγγλικού see - out που σημαίνει δες έξοδο), cerr (παράφραση του αγγλικού see -err or που σημαίνει δες έξοδο λαθών), και clog (παράφραση του αγγλικού see-log που σημαίνει δες έξοδο αρχείου καταγραφής) αντικείμενα της ostream για την ροή δεδομένων στην τυπική έξοδο, την έξοδο λαθών και την έξοδο στο αρχείο καταγραφής αντίστοιχα. Όλα αυτά τα αντικείμενα βρίσκο Όλα αυτά τα αντικείμενα βρίσκονται κάτω από το χώρ νται κάτω από το χώρο ονομάτων (namespace) std

154. Δώστε ένα παράδειγμα σε C++ που να εκτυπώνει τα παρακάτω μηνύματα το ένα κάτω από το άλλο: "Ένα απλό Πρόγραμμα", "Είναι γραμμένο σε C++" , "Η C++ είναι αντικειμενοστραφής γλώσσα προγραμματισμού".

#include <iostream>

int main() {

cout << "Ένα απλό πρόγραμμα\n";

cout << "Είναι γραμμένο σε C++\n";

cout << "Η C++ είναι αντικειμενοστραφής γλώσσα προγραμματισμού \n";

return 0;

.......

#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

using namespace std;

int main(int argc, char** argv) {

cout << "Ena aplo programma" << endl;

cout << "Einai grammeno se C++" << endl;

cout << "H C++ einai ...." << endl;

return 0;

}

155. Αναλύστε τι είναι το λάθος σε χρόνο εκτέλεσης και τι λάθος κατά την μεταγλώττιση. Να αναφέρετε από δύο αιτίες που προκαλούν αυτά τα λάθη.

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

156. Αναλύστε τις διαφορές μεταξύ if και else if όσον αφορά στον έλεγχο και στη χρήση τους. Δώστε παράδειγμα. Η εντολή if χρησιμοποιείται όταν θέλουμε να εκτελέσουμε κάποιες εντολές μόνο όταν ικανοποιείται κάποια συνθήκη:

if (συνθήκη)

{ εντολές; }

else

{ εντολές; }

Μπορούν να συνδυαστούν πολλές εντολές if μεταξύ τους, όταν θέλουμε να ελέγξουμε περισσότερες από δύο περιπτώσεις, όπως στο ακόλουθο παράδειγμα:

if (x == 1) {

cout << "x is one." << endl;

}

else if (x == 2) {

cout << "x is two." << endl;

}

else if (x == 3) {

cout << "x is three." << endl;

}

else if (x == 4) {

cout << "x is four." << endl;

}

else {

cout << "x is not between 1-4." << endl;

}

Το if ελέγχει παντα την συνθηκη ενώ το else if θα ελέγξει την συνθηκη μόνο αν ο προηγούμενος έλεγχος (If ή else if) έχει αποτέλεσμα ψευδές

Η εντολή if...elseif...else είναι μία δομή ελέγχου με την οποία μπορούμε να εκτελέσουμε υπό ορισμένες συνθήκες ένα κομμάτι κώδικα. η else if και else είναι προαιρετικές δομές (δηλαδή μπορούμε να χρησιμοποιήσουμε την if σκέτη) για να μας δώσουν περισσότερη ευελιξία στην περίπτωση που θέλουμε να εκτελεστεί διαφορετικό κομμάτι κώδικα αν δεν είναι αληθής η συνθήκη μέσα στην If.

Σύνταξη

if (Συνθήκη Α)

{

// Τρέξε τον κώδικα Α

}

else if (Συνθήκη Β)

{

// Τρέξε τον κώδικα Α

}

else

{

// Τρέξε τον κώδικα Γ

}

Παράμετροι

Σύνθήκη Α, Β, Γ: πρέπει να είναι μία έκφραση boolean η οποία θα επιτρέφει true ή false.

Θα πρέπει να έχετε υπ' όψιν πως όταν χρησιμοποιείτε μία λογική συνθήκη θα χρησιμοποιήσετε έναν ή περισσότερους τελεστές σύγκρισης.

x == y (x είναι ίσο με y)

x != y (x δεν είναι ίσο με y)

x < y (x είναι μικρότερο από y)

x > y (x είναι μεγαλύτερο από y)

x <= y (x είναι μικρότερο ή ίσο από y)

x >= y (x είναι μεγαλύτερο ή ίσο από y)

Προσοχή

Όταν θέλετε να ελέγξετε αν δύο μεταβλητές ή δύο μέρη μία συνθήκης ότι είναι ίσα να χρησιμοποιείτε πάντα δύο = (==). Για παράδειγμα αν το Χ=1 και το Υ=2 για να ελέγξετε αν οι δύο μεταβλητές είναι ίσες θα πρέπει να γράψετε if (Χ==Υ) το οποίο θα επιστρέψει false.

Αν γράψετε if (X=Y) αυτό που θα συμβεί είναι να πάρει το Χ την τιμή του Y, δηλαδή να γίνει ανάθεση τιμής όπως θα γράφαμε π.χ. Υ=5. Το if(Χ=Υ) θα δώσει την τιμή 2 στο Χ, το οποίο μεταφράζεται τελικά if(2) όπου επιστρέφεται η τιμή true.

Τόσο το γεγονός ότι θα αλλάξει η τιμή της μεταβλητής Χ όσο και το γεγονός ότι η if θα επιστρέφει πάντα true είναι κάτι που θέλουμε να αποφύγουμε κατά την χρήση if.

Παράδειγμα κώδικα με if...else if...else

Να γράψετε πρόγραμμα που θα βρίσκει τον μεγαλύτερο από τρεις αριθμούς.

A = 5;

B = 7;

C = 3;

if ((A>B) && (A>C))

{

Serial.print("Ο μεγαλύτερος αριθμός είναι ο Α");

}

else if (B>C)

{

Serial.print("Ο μεγαλύτερος αριθμός είναι ο Β");

}

else

{

Serial.print("Ο μεγαλύτερος αριθμός είναι ο C");

}

157. Αναλύστε τη χρήση των πινάκων χαρακτήρων string στον προγραμματισμό με C++.

Αντίθετα με τα strings σε άλλες γλώσσες προγραμματισμού (C, PASCAL) που είναι απλώς πίνακες χαρακτήρων, στη C++ τα strings είναι κανονικά αντικείμενα, που υλοποιούνται με την κλάση string (στο namespace std). Φυσικά, για λόγους συμβατότητας με τη C, υπάρχει πλήρης υποστήριξη των strings υπό την μορφή πινάκων χαρακτήρων (char * ή char []) μορφή πινάκων χαρακτήρων (char * ή char []).

158. Αναλύστε τις διαφορές μεταξύ for, while και do while, όσον αφορά στον έλεγχο των συνθηκών τους. Δώστε από ένα παράδειγμα σε C++.

H for εκτελείται για προκαθορισμένο αριθμό επαναλήψεων

for (int i = 1; i < 10; i += 3)

{

cout << i << endl;

}

int x = 1;

Η while εκτελείται μόνο εφόσον η συνθήκη της είναι TRUE

while (x <10){

cout << x << endl;

x+=3;

}

H do while εκτελείται τουλάχιστον μία φορά ανεξαρτήτως της συνθήκης της

int x = 1;

do {

cout << x << endl;

x+=3;

}

while (x <10);

159. Αναλύστε τη χρήση της υπερφόρτωσης σε συναρτήσεις και κατασκευαστές.

Με την υπερφόρτωση συναρτήσεων μπορούμε να ορίσουμε πολλές συναρτήσεις με το ίδιο όνομα, έχοντας διαφορετικά σύνολα παραμέτρων (διαφορετικούς τύπους ή διαφορετικό αριθμό ορισμάτων). Το ίδιο ισχύει και για την υπερφόρτωση κατασκευαστών, μπορούμε να ορίσουμε διαφορετικούς κατασκευαστές για ένα αντικείμενο έχοντας διαφορετικά σύνολα παραμέτρων (διαφορετικούς τύπους ή διαφορετικό αριθμό ορισμάτων). 

160. Τι είναι ένα string στην C++ και σε τι διαφέρει από ένα αλφαριθμητικό C-string;

Στο C, οι συμβολοσειρές είναι απλά συστοιχίες char, οι οποίες, κατά σύμβαση, τελειώνουν με ένα byte NULL. Στη C++, οι συμβολοσειρές (std :: string) string) είναι αντικείμενα με όλη τη σχετική αυτοματοποιημένη διαχείριση μνήμης και ελέγχου που τα κάνει πολύ ασφαλέστερα και ευκολότερα στη χρήση.

Strings are objects that represent sequences of characters

Οι συμβολοσειρές είναι αντικείμενα που αντιπροσωπεύουν ακολουθίες χαρακτήρων.

Συμβολοσειρές C++

Οι συμβολοσειρές χρησιμοποιούνται για την αποθήκευση κειμένου.

Μια string μεταβλητή περιέχει μια συλλογή χαρακτήρων που περιβάλλονται από διπλά εισαγωγικά:

Παράδειγμα

Δημιουργήστε μια μεταβλητή τύπου stringκαι αντιστοιχίστε της μια τιμή:

string greeting = "Hello";

Για να χρησιμοποιήσετε συμβολοσειρές, πρέπει να συμπεριλάβετε ένα επιπλέον αρχείο κεφαλίδας στον πηγαίο κώδικα, τη <string>βιβλιοθήκη:

Παράδειγμα

// Include the string library

#include <string>

//Create a string variable

string greeting = "Hello";

Αλφαριθμητικά στη C++  stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=278

Αλφαριθμητικό (string) είναι οποιαδήποτε ακολουθία χαρακτήρων, και στη C++ ορίζεται ως ένας πίνακας. Τα στοιχεία του πίνακα είναι οι χαρακτήρες του αλφαριθμητικού, συν τον ειδικό χαρακτήρα τέλους (null character). Όλα τα αλφαριθμητικά περιέχουν το χαρακτήρα τέλους, έτσι πχ η λέξη hello είναι πίνακας 6 και όχι 5 θέσεων. 

Αλφαριθμητικές σειρές (character strings)  

Η αλφαριθμητική σειρά (character string ή απλούστερα string) είναι μια σειρά από χαρακτήρες τους οποίους διαχειριζόμαστε ως ενιαίο σύνολο. Η αλφαριθμητική σειρά είναι ένας αναγκαίος τύπος δεδομένων που υποστηρίζεται από τις περισσότερες γλώσσες προγραμματισμού. Κυρίως χρησιμοποιείται για την αποθήκευση και διαχείριση λεκτικών, π.χ. ονόματα

Η C παραδοσιακά αναπαριστά τις σειρές ως πίνακες χαρακτήρων στους οποίους το τέλος των έγκυρων χαρακτήρων σημειώνεται με τον χαρακτήρα null (άκυρος χαρακτήρας), '\0'. Για παράδειγμα, σε ένα πίνακα μήκους x χαρακτήρων μπορεί να αποθηκευτεί οποιαδήποτε σειρά με μέγεθος x-1, δηλ. πλήθος έγκυρων χαρακτήρων, από 1 έως x-1. Στην περίπτωση που στον προαναφερόμενο πίνακα αποθηκευτεί 1 χαρακτήρας, τότε στην θέση του πίνακα με δείκτη 1 πρέπει να αποθηκευτεί ο null χαρακτήρας. Στην περίπτωση που αποθηκευτούν x-1 χαρακτήρες, δηλ. καταληφθούν οι θέσεις 0 έως x-2, τότε ο null χαρακτήρας πρέπει να τοποθετηθεί στην θέση x-1. Οι σειρές αυτές είναι γνωστές ως τερματιζόμενες με null σειρές (null-terminated strings). Εφόσον οι τερματιζόμενες με null σειρές, υλοποιούνται ως πίνακες χαρακτήρων, ότι ισχύει για τους μονοδιάστατους πίνακες και τους pointers, ισχύει και για τις τερματιζόμενες με null σειρές. Επιπλέον, μία σειρά από χαρακτήρες που περιβάλλεται από διπλή απόστροφο (double quotes) συνιστά μια τερματιζόμενη με null σειρά.γραφές αντικειμένων, κλπ.

Στην C++ έχουμε δύο διαφορετικούς τύπους για την αναπαράσταση των σειρών, τα παραδοσιακά (conventional) strings που προέρχονται από την C και την κλάση string που έχει αναπτυχθεί στο πλαίσιο του αντικειμενοστραφούς υποδείγματος. 

Συµβολοσειρές στην C++     users.uoi.gr/nglinos/cs242/lectures/w12/w12_strings.pdf

Στην C++ υπάρχουν εκτός από τις συµβολοσειρές που υπάρχουν στην C, και ειδική κλάση string για αντικείµενα τυπου συµβολοσειρά (string)• char color[] = "blue";

• string color="blue";

- Για αλυσίδες τύπου C υπάρχουν συναρτήσεις στην βιβλιοθήκη <cstring> ενώ για τα αντικείµενα string της C++........

161. Αναλύστε τη χρήση των πινάκων χαρακτήρων string στον προγραμματισμό με C++.

Στην C++ χρησιμοποιούμε πίνακες χαρακτήρων string για την αποθήκευση μιας συλλογής δεδομένων. Κάθε string-κελί του πίνακα το αντιμετωπίζουμε ως ένα object αυξάνοντας έτσι την ευκολία χρησιμοποίησης τους από το χρήστη.

162. Δημιουργήστε σε C++ ένα πρόγραμμα το οποίο θα δέχεται από τον χρήστη ένα αριθμό και θα επιστρέφει ως τιμή το παραγοντικό του αριθμού. Χρησιμοποιήστε συναρτήσεις αναδρομής.Παράδειγμα το παραγοντικό του 7! είναι:5040 (1*2*3*4*5*6*7). Γενικά:Ν!=(1*2*3...*Ν) και 0!=1

#include <iostream>

#include <string> using namespace std;

int main(){

string num;

int x;

cout<<("Dwse arithmo");

cin>>num;

x=atoi(num);

x=factorial(num);

cout<<"To paragwntiko tou arithmou pou dwsate einai dwsate einai:"<<x;

int factorial(int n)

{

if(n > 1)

return n * factorial(n - 1);

else

return 1;

}

....

#include <iostream>

class parag{

int input;

int output;

public:

int calc(int x)

{

if (x==1)

return 1;

else

{

return(x*calc(x-1));

}

}

parag(int a)

{

input = a;

output = calc(a);

}

int get_output()

{

return output;

}

};

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

using namespace std;

int main(int argc, char** argv) {

int number;

cin >> number;

parag ask1(number);

cout << ask1.get_output();

return 0;

163. Δημιουργήστε το πρόγραμμα εύρεσης λέξης string σε C++. Το πρόγραμμα δημιουργεί δύο πίνακες string που ο πρώτος περιέχει την πρόταση «C++ is an object oriented Language and is a superset of C». Ο δεύτερος περιέχει την λέξη «is». Το πρόγραμμα πρέπει να ψάχνει στον πρώτο πίνακα να βρει εάν υπάρχει η λέξη που περιέχεται στο δεύτερο πίνακα και να επιστρέφει τη θέση στην οποία βρίσκεται καθώς και πόσες φορές επαναλαμβάνεται.

#include <iostream>

#include <string>

using namespace std;

int main() {

string first []="C++ is an object oriented Language and is a superset of C ";

string second[]="i second[]="is";

int found=first[0].find(second[0]);

int sum=0;

while (found!=string::npos){

cout<<"foun cout<<"found at:"<<found at:"<<found<<endl; <<endl;

sum+=1;

found=first[0].find(second[0],found+1);

if(found==string::npos)

cout<<"The string doesnt cout<<"The string doesnt exists\n"<<e exists\n"<<endl;

}

cout<<sum;

return 0;

}

.....

#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

using namespace std;

int main(int argc, char** argv) {

string s1="C++ is an object oriented Language and is a superset of C";

string s2 = "is";

int ndx, cnt;

cnt=0;

ndx = s1.find("is");

while((0<=ndx) && (ndx < s1.length()))

{

cout << ndx << endl;

cnt++;

ndx = s1.find("is",ndx+1);

}

cout << cnt <<endl;

return 0;

}

164. Γράψτε δυο συναρτήσεις που θα υπολογίζουν τον Μέγιστο Κοινό Διαιρέτη (ΜΚΔ) και το Ελάχιστο κοινό πολλαπλάσιο (ΕΚΠ) δυο ακέραιων αριθμών. ΜΚΔ είναι ο μεγαλύτερος από τους κοινούς διαιρέτες δηλαδή τους αριθμούς που τους διαιρούν ακριβώς. Κοινό πολλαπλάσιο (Κ.Π.) δύο ή περισσοτέρων αριθμών λέγεται κάθε ακέραιος, εκτός από το 0, που το συναντάμε κοινό στα πολλαπλάσια των δύο αριθμών. Ο μικρότερος από τα κοινά πολλαπλάσια κάποιων ακέραιων αριθμών λέγεται Ελάχιστο Κοινό Πολλαπλάσιο (Ε.Κ.Π.).

void megistos_koinos_diairetis(int a,int b){

int m;

if(b>a){

m=a;

a=b;

b=m;

}

if(b!=0){

do

{

m=a-(a/b)* b;

if(m==0)

break;

a=b;

b=m;

}while(m>0);

cout<<"Megistos Koinos Diairetis = "<<b;

}

else

{

cout<<"megistos koinos diairetis = "<<a;

}

}

void megistos_koinos_diairetis(int a,int b){

int x,y,max,min,ekp,c;

do

{

x=a;

y=b;

}while(!(x>0 && y>0));

if(x>y){

max=x;

min=y;

}

else{ max=y;

min=x;

}

c = 1;

do{

ekp=max*c;

c++;

} while ((ekp%min)!=0) ;

cout<<"\n\nEKP=%d\n---"<<ekp);

cout<<("\n\n");

}

........

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

#include<iostream>

using namespace std;

int main() {

int first_number;

cout<<"Enter First Number : ";cin>>first_number;

int second_number;

cout<<"Enter Second Number: ";cin>>second_number;

int gcd;

for(int i=1;i<=first_number&&i<=second_number;i++){

if(first_number%i==0 && second_number%i == 0 ){

gcd=i;

}

}

cout<<"Greatest Common Divison (GCD):"<<gcd<<endl;

return 0;

}

ΕΛΑΧΙΣΤΟ ΚΟΙΝΟ ΠΟΛΛΑΠΛΑΣΙΟ

#include<iostream>

using namespace std;

int main() {

int first_number;

cout<<"Enter First Number : ";cin>>first_number;

int second_number;

cout<<"Enter Second Number: ";cin>>second_number;

int ekp, a,b;

if(first_number < second_number)

{

a= first_number;

b= second_number;

}

else

{

a= second_number;

b=first_number;

}

for(int i=1;;i++)

{

ekp = a*i;

if(ekp%b == 0)

break;

}

cout<<"EL KO PO:"<<ekp<<endl;

return 0;

}

165. Αναλύστε τους όρους "κληρονομικότητα" και "πολυεπίπεδη κληρονομικότητα" (multi- level inheritance). Δώστε παραδείγματα σε C++ κώδικα.

Η κληρονομικότητα είναι ένα από τα βασικά χαρακτηριστικά μιας αντικειμενοστραφούς γλώσσας προγραμματισμού Επιτρέπει στους προγραμματιστές να αντλούν μια νέα κλάση από την υπάρχουσα κλάση. Η παράγωγη κλάση κληρονομεί τα χαρακτηριστικά της βασικής κλάσης. Υπάρχουν διάφορα μοντέλα κληρονομιάς στον προγραμματισμό C ++.

Στην C ++, μπορούμε να αντλήσουμε μια κλάση από την κλάση βάσης (base class) αλλά μπορούμε επίσης να αντλήσουμε μια κλάση από την παράγωγη κλάση.  Αυτή η μορφή κληρονομικότητας είναι γνωστή ως πολυεπίπεδη κληρονομικότητα

Παράδειγμα:

class A

{ class A

... .. ...

};

class B: public A

{

... .. ...

};

class C: public B

{

... ... ...

};

Εδώ, η κλάση Β προέρχεται από την κλάση βάσης Α και η κλάση C προέρχεται από την παράγωγη κλάση Β.

Άλλο παράδειγμα κληρονομικότητας:

#include <iostream>

using namespace std;

// Base class

class Shape {

public:

void setWidth(int w) {

width = w;

}

void setHeight(int h) {

height = h;

}

protected:

int width;

int height;

};

// Derived class

class Rectangle: public Shape {

public:

int getArea() {

return (width * height);

}

};

int main(void) {

Rectangle Rect;

Rect.setWidth(5);

Rect.setHeight(7);

// Print the area of the object.

cout << "Total area: " << Rect.getArea() << endl;

return 0;

}

Σε αυτό το παράδειγμα έχουμε μια βασική κλάση Shape και από αυτή κληρονομεί τα βασικά χαρακτηριστικά της κλάσης μια νέα κλάση με όνομα Rectangle. Η Rectangle, έχει όλα τα γνωρίσματα του γονέα της και μια επιπλέον συνάρτηση που υπολογίζει το εμβαδόν του ορθογωνίου.

166. Ποια χρωματικά μοντέλα υπάρχουν; Δώστε μια σύντομη περιγραφή για τη λειτουργία τους και για τα χρώματα που χρησιμοποιούνται στο κάθε ένα.

Χρωματικό μοντέλο RGB Η ονομασία RGB του χρωματικού μοντέλου προέρχεται από τα αρχικά Red Green Blue (Κόκκινο Πράσινο Μπλέ). Με τα βασικά αυτά χρώματα κωδικοποιούνται όλα τα χρώματα που μπορεί να εμφανιστούν σε μία οθόνη υπολογιστή. Στην 8bit μορφή του χρωματικού αυτού μοντέλου κάθε χρώμα μπορεί να παρασταθεί με μία τριάδα αριθμών από 0 έως 255. Το μοντέλο βασίζεται στο γεγονός ότι, όταν μία οθόνη δεν εκπέμπει φως, εμφανίζεται μαύρη. Τα υπόλοιπα χρώματα δημιουργούνται με υπέρθεση - ανάμιξη των τριών βασικών με συγκεκριμένη αναλογία. Μερικά παραδείγματα χρωμάτων δίνονται παρακάτω στην 8bit αυτή έκδοση του μοντέλου: • Μαύρο: (0,0,0) • Λευκό: (255,255,255) • Κόκκινο: (255,0,0) • Πράσινο: (0,255,0) • Πορτοκαλί: (255,102,0) 

Χρωματικό μοντέλο CMYK (Χρώμα C Χρωματικό μοντέλο CMYK (Χρώμα CMYK) Πολλές φορές θα έχετε παρατηρήσει ότι όταν τυπώνετε μια έγχρωμη εικόνα από τον υπολογιστή, η εικόνα που τυπώνεται αποκλίνει χρωματικά σε πολλά σημεία από αυτή που βλέπετε στον υπολογιστή. Κι αυτό γιατί δεν μπορούν να χρησιμοποιηθούν στην εκτύπωση μελάνια των τριών χρωμάτων που χρησιμοποείται στο RGB (κόκκινο, πράσινο, μπλε). Η επικάλυψη δύο και μόνο εξ αυτών δημιουργεί μαύρο. Χρειάζεται επομένως μια διαφορετική προσέγγιση. Στην εκτύπωση των εντύπων χρησιμοποιείται ευρέως το σύστημα C=Cyan M=Magenta Y=Yellow που είναι συμπληρωματικό μοντέλο του R μοντέλο του RGB. Με τα τρία αυτά χρώματα δημιουργούνται τα δευτερογενή Κόκκινο - κινο - Πράσινο - Μπλε ως εξής: ● Κόκκινο: Ματζέντα + Κίτρινο Πράσινο: Κίτρινο + Γαλάζιο ● Μπλε: Γαλάζιο + Ματζέντα Το μοντέλο αυτό βασίζεται στο γεγονός ότι το υπόβαθρο της εκτύπωσης είναι το λευκό χαρτί που ανακλά όλα τα χρώματα (μήκη κύματος). Κάθε βασικό χρώμα που προστίθεται με ένα ρώμα που προστίθεται με ένα μελάνι απορροφά ορισμένα χρώματα και αποδίδει τα υπόλοιπα. Για παράδειγμα το κίτρινο μελάνι απορροφά το μπλε χρώμα και αφήνει το πράσινο και το κόκκινο να ανακλαστεί. Εδώ ο συνδυασμός των τριών βασικών χρωμάτων δίνει το μαύρο χρώμα (πλήρης απορρόφηση των ακτινοβολιών). Για το λόγο αυτό το μοντέλο CMY χαρακτηρίζεται και ως "αφαιρετικό". Μαύρο χρώμα, επίσης, προκύπτει από το συνδυασμό ενός βασικού και του αντίθετου δευτερογενούς: ● Μαύρο: Γαλάζιο + Ματζέντα + Κίτρινο ● Μαύρο: Γαλάζιο + Κόκκινο ● Μαύρο: Ματζέντα + Πράσινο ● Μαύρο: Κίτρινο + Μπλε Tα μελάνια, όμως, από τη φύση τους δεν μπορούν να αποδώσουν συγκεκριμένα μήκη κύματος - χρώματα (όπως τα εικονοστοιχεία (pixels) μίας οθόνης) αλλά, μία πιο ευρεία περιοχή του χρωματικού φάσματος. Το αποτέλεσμα είναι ο συνδυασμός των τριών βασικών χρωμάτων να δίνει ένα καφετί χρώμα αντί για το μαύρο. Για το λόγο αυτό προστέθηκε στο μοντέλο CMY και το μαύρο μελάνι, με αποτέλεσμα να προκύψει το χρωματικό μοντέλο CMYK (Cyan - Magenta - Yellow - Black). Πρακτικά στην εκτύπωση δεν χρησιμοποιείται σήμερα το CMY μοντέλο αλλά το CMYK. 

Χρωματικό μοντέλο HSB Αναλύει το χρώμα σε τρεις παραμέτρους: Απόχρωση (Hue) Το χρώμα που αντανακλάται ή μεταδίδεται διαμέσου ενός αντικειμένου. Μετράται ως περιοχή στον τυπικό δίσκο χρωμάτων που εκφράζεται ως μοίρα μεταξύ του 0° και του 360°. Σε κοινή χρήση, η απόχρωση αναγνωρίζεται από το όνομα του χρώματος όπως κόκκινη, πορ ως κόκκινη, πορτοκαλί ή πράσινη. τοκαλί ή πράσινη. Κορεσμός (Saturation) Ισχύς ή καθαρότητα του χρώματος (ορισμένες φορές αποκαλείται chroma). Ο κορεσμός αντιπροσωπεύει την ποσότητα του γκρι σε αναλογία με την απόχρωση και μετράται ως ποσοστό από 0% (γκρι) έως 100% (πλήρης κορεσμός). Στον τυπικό δίσκο χρωμάτων ο κορεσμός αυξάνεται από το κέντρο προς την άκρη. Φωτεινότητα (Brightne (Brightness) Η σχετική φωτεινότητα ή σκοτείνιασμα του χρώματος μετράται συνήθως ως ποσοστό από το 0% (μαύρο) έως το 100% (λευκό). Διαδικτυακά Χρώματα Η γλώσσα γραφής των ιστοσελίδων HTML, χρησιμοποιεί για την απεικόνιση των χρωμάτων το μοντέλο RGB στην δεκαεξαδική του μορφή. Χρωματικό μοντέλο Lab Το μοντέλο αυτό αναλύει το χρώμα του κάθε εικονοστοιχείου σε τρεις παραμέτρους L,a,b: ● Ένταση φωτεινότητας (L Ένταση φωτεινότητας (Luminocity). Χρωματική θέση ανάμεσα στο κόκκινο και το συμπληρωματικό του πράσινο (a). ● Χρωματική θέση ανάμεσα μπλε και το συμπληρωματικό του κίτρινο (b).

167. Ποιο χρώμα ονομάζουμε πρωτεύον συμπληρωματικό και ποια δευτερεύοντα; Δώστε δύο (2) παραδείγματα, καθώς και αιτιολογία για το λόγο χρήσης τους.

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

Τι είναι όμως τα συμπληρωματικά ή αντίθετα χρώματα; Για κάθε βασικό χρώμα υπάρχει ένα δεύτερο που βρίσκεται σε ιδιαίτερη σχέση μαζί του. Είναι το χρώμα που δημιουργήθηκε χωρίς τη συμμετοχή αυτού του βασικού. Έτσι π. χ. για το κόκκινο έχουμε το πράσινο, που δημιουργείται με την ανάμειξη των άλλων δύο βασικών χρωμάτων του κίτρινου και του μπλε. Με τον τρόπο αυτό λοιπόν, δημιουργούνται τρία ζευγάρια χρωμάτων: κόκκινο-πράσινο, κίτρινο-μωβ, μπλε-πορτοκαλί. Τα χρώματα αυτών των ζευγαριών είναι μεταξύ τους αντίθετα και συμπληρωματικά. Όταν δηλ. τοποθετήσουμε ένα κόκκινο αντικείμενο σε πράσινο φόντο η εντύπωση που δημιουργείται είναι η αντίθεση. Φαντάζομαι μπορείς να το αντιληφθείς και μόνο απ' τις χρωματιστές λέξεις βλέποντάς τες δίπλα-δίπλα. Αυτός ο λόγος για τον οποίο το κόκκινο με το πράσινο, το κίτρινο με το μωβ, και το μπλε με το πορτοκαλί ονομάζονται αντίθετα χρώματα

Συμπληρωματικά απ' την άλλη ονομάζονται γιατί σαν ζευγάρι το κάθε ένα από αυτά συμπληρώνει το χρωματικό φάσμα. Όπως έγραψα παραπάνω το κόκκινο, το κίτρινο και το μπλε μπορούν να δημιουργήσουν όλα τα υπόλοιπα χρώματα, ολόκληρο δηλ. το χρωματικό φάσμα. Παίρνοντας ένα ζευγάρι συμπληρωματικών είναι σαν να παίρνουμε και τα τρία βασικά χρώματα, το ένα μόνο του και τα άλλα δύο σε ανάμειξη: ΚΟΚΚΙΝΟ+ ΠΡΑΣΙΝΟ = ΚΟΚΚΙΝΟ+ (ΜΠΛΕ+ ΚΙΤΡΙΝΟ) ΚΙΤΡΙΝΟ+ ΜΩΒ = ΚΙΤΡΙΝΟ+ (ΚΟΚΚΙΝΟ+ ΜΠΛΕ) ΜΠΛΕ+ ΠΟΡΤΟΚΑΛΙ = ΜΠΛΕ+ (ΚΟΚΚΙΝΟ+ ΚΙΤΡΙΝΟ)

168. Ποια είναι τα χαρακτηριστικά μιας ψηφιογραφικής εικόνας (bitmap);

Τα χαρακτηριστικά μια ψηφιογραφικής εικόνας (bitmap) είναι: ● Η ανάλυση ή διακριτική ικανότητα (resolution), που εκφράζει την πυκνότητα των εικονοστοιχείων (pixels) του γραφικού bitmap σε κάθε διάσταση και μετριέται σε κουκίδες ανά ίντσα (dots per inch, dpi). ● Βάθος χρώματος (color depth) ονομάζεται ο αριθμός των bits που χρησιμοποιούνται για την κωδικοποίηση της πληροφορίας της χρωματικής απόχρωσης κάθε εικονοστοιχείου. Αν το βάθος χρώματος είναι n bits, μια εικόνα μπορεί να διαθέτει μέχρι 2n διαφορετικά χρώματα. ● Το μέγεθός της (size), που εκφράζει την απαιτούμενη χωρητικότητα για την αποθήκευση του γραφικού bitmap σε κάποιο αποθηκευτικό μέσο.

169. Ποιο είναι το μέγεθος μίας ασυμπίεστης εικόνας bitmap (σε bytes), διαστάσεων 100x100 pixels, αν είναι α) true-color; β) grayscale;

Το μέγεθος σε bits μιας εικόνας προκύπτει αν πολλαπλασιάσουμε την ανάλυση με το βάθος χρώματος. Στη συνέχεια πρέπει να διαιρέσουμε το αποτέλεσμα με το 8 για να το μετατρέψουμε σε bytes. Ο τύπος υπολογισμού είναι:

(Ύψος x Πλάτος x Βάθος χρώματος) / 8.

Στην περίπτωση του true-color το βάθος χρώματος είναι 24bit. Συνεπώς το μέγεθος της ασυμπίεστης εικόνας bitmap, διαστάσεων 100x100 pixels είναι:

(100 x 100 pixels x 24 bits) / 8 = 30000 bytes.

Το βάθος χρώματος στην περίπτωση του grayscale είναι 8 bits. Συνεπώς το μέγεθος είναι:

(100 x 100 pixels x 8 bits) / 8 = 10000 bytes.

170. Να αναφέρετε τέσσερις μορφές αρχείων ψηφιογραφικών εικόνων (bitmap) και πού χρησιμοποιούνται, συνήθως, αντίστοιχα.

  • Bmp: αποτελεί πρότυπο γραφικών bitmap και παλαιότερα χρησιμοποιούνταν πολύ, σε πληθώρα προγραμμάτων ζωγραφικής και επεξεργασίας εικόνας.
  • Gif : χρησιμοποιούνται στη διακίνηση εικόνων κινούμενων εικόνων στο Διαδίκτυο.
  • Jpg: χρησιμοποιούνται στη διακίνηση εικόνων στα δίκτυα υπολογιστών και το Διαδίκτυο, λόγω της καλής συμπίεσης που επιτυγχάνουν.
  • Tiff : χρησιμοποιείται στην αποθήκευση εικόνων που εισάγονται στον υπολογιστή για επεξεργασία και είναι η πλέον διαδεδομένη μορφή αποθήκευσης για τις γραφικές τέχνες.
  • Pcx: χρησιμοποιείται στο πακέτο ζωγραφικής Paintbrush των Windows και σε πληθώρα προγραμμάτων ζωγραφικής και επεξεργασίας πληθώρα προγραμμάτων ζωγραφικής και επεξεργασίας εικόνας.

171. Ποια η χρησιμότητα μάσκας κατά την επεξεργασία εικόνας;

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

172. Τι είναι πρότυπο συμπίεσης εικόνας JPEG; Ποια είναι τα μειονεκτήματα και τα πλεονεκτήματα του;

Η τύπου JPEG αποθήκευση σχεδιάστηκε από το Joint Photographic Expert Group και είχε ως στόχο να επιτύχει τη μέγιστη δυνατή συμπίεση μιας εικόνας, χρησιμοποιώντας τεχνικές συμπίεσης με απώλειες. Αυτό σημαίνει την οριστική απώλεια πληροφορίας, δηλαδή από τη στιγμή που μια εικόνα συμπιεστεί και μετά αποσυμπιεστεί, η παραγόμενη εικόνα δεν είναι ακριβώς ίδια με την αρχική. Παρ' όλα αυτά, συνήθως οι απώλειες δε γίνονται αντιληπτές από το ανθρώπινο μάτι. Τα πλεονεκτήματα εδώ είναι, ότι ενώ οι περισσότερες από τις άλλες μεθόδους πετυχαίνουν συμπίεση 3:1, η JPEG τεχνική πετυχαίνει λόγους συμπίεσης 20:1 ή και περισσότερο. Τα μειονεκτήματα είναι ότι η ευελιξία αυτού του τύπου αρχείων μπορεί να οδηγήσει σε προβλήματα ασυμβατότητας. Καθώς η εικόνα συμπιέζεται όταν αποθηκεύεται, ο περαιτέρω χειρισμός εικόνων σε JPEG μορφή, μπορεί να οδηγήσει σε χειροτέρευση του ποσοστού αλλοίωσης της ποιότητας.

173. Τι ονομάζουμε Bit Depth, τι ονομάζουμε Color Depth και ποιες κατηγορίες εικόνων γνωρίζετε με βάση το bit depth;

  • 21 = 2: Ασπρόμαυρη εικόνα (χωρίς διαβαθμίσεις γκρίζου).
  • 28: = 256 χρώματα (ή αποχρώσεις του γκρίζου).
  • 216 = 65536 χρώματα Η εικόνα με αυτό το βάθος χρώματος αναφέρεται και ως Highcolor.
  • 224 = 16.777.216 χρώμ. Η εικόνα με αυτό το βάθος χρώματος αναφέρεται και ως Truecolor.
  • 248 = Αυτό το βάθος χρώματος υπερβαίνει την διακριτική ικανότητα του ανθρώπινου οφθαλμού. Χρησιμοποιείται, ωστόσο, για πρακτικούς λόγους, από π όγους, από πολλούς σαρωτές.

Βάθος μπιτ (Bit Depth), είναι ακριβώς το ίδιο με το Color Depth, απεικονίζει δηλαδή τον αριθμό των bits που χρησιμοποιούνται για να αναπαραστήσουν το pixel μιας εικόνας.

174. Ποια είναι τα πλεονεκτήματα και τα μειονεκτήματα των ψηφιογραφικών εικόνων bitmap;

Τα μειονεκτήματα των γραφικών bitmap είναι: • Μεγαλύτερο μέγεθος αρχείων σε σχέση με τα διανυσματικά γραφικά. • Δεν παρέχουν δυνατότητες γεωμετρικών μετασχηματισμών (μετακίνηση, μεγέθυνση, σμίκρυνση, περιστροφή, διάτμηση και αναστροφή) των σχημάτων χωρίς να προκληθούν αλλοιώσεις. • Το γραφικό bitmap αποτελεί ένα ενιαίο αντικείμενο και δεν επιτρέπει τον άμεσο διαχωρισμό των συστατικών του στοιχείων ούτε και την ανεξάρτητη επεξεργασία του καθενός. • Η επεξεργασία τους είναι πιο δύσκ Η επεξεργασία τους είναι πιο δύσκολη και πιο αργή σ ολη και πιο αργή σε σχέση με τα διανυσματικά ε σχέση με τα διανυσματικά γραφικά. Το πλεονέκτημα των γραφικών bitmap είναι ότι είναι κατάλληλα για φωτορεαλιστικές και τρισδιάστατες απεικονίσεις, διότι προσφέρουν μεγάλο εύρος χρωμάτων, λεπτομερειών και φωτοσκιάσεων.

175. Αναφέρετε τους τρόπους λήψης και ψηφιοποίησης ψηφιογραφικής εικόνας.

Μερικοί τρόποι λήψης/ψηφιοποίησης εικόνων bitmap είναι με: ● Προγράμματα δημιουργίας και επεξεργασίας εικόνας. ● Ψηφιοποίηση εικόνων με σαρωτή. ● Σύλληψη εικόνων από την οθόνη του υπολογιστή μέσω κατάλληλου λογισμικού. ● Χρήση ψηφιακής φωτογραφικής μηχανής. ● Ψηφιοποίηση εικόνας βίντεο ή τηλεόρασης μέσω ειδικής κάρτας σύλληψης εικόνας βίντεο.

176. Με ποια εντολή δημιουργούμε, διαγράφουμε έναν πίνακα και με ποια εντολή διαγράφουμε τα δεδομένα ενός πίνακα;

π.χ. CREATE TABLE Persons (

PersonID int,

LastName varchar(255),

FirstName varchar(255),

Address varchar(255),

City varchar(255)

);

Διαγραφή πίνακα: DROP TABLE

π.χ. DROP TABLE Persons;

Διαγραφή δεδομένων πίνακα: DELETE FROM TABLE

WHERE συνθήκη

π.χ. DELETE FROM Persons Persons

WHERE LastName= 'Petrou';

177. Τί εννοούμε όταν αναφερόμαστε στις όψεις; Ορίστε την "όψη" στην SQL.

Η όψη (view) είναι μια σχέση μιας βάσης δεδομένων, που δεν έχει δημιουργηθεί με κάποια εντολή create table. Με τις όψεις μπορούμε να εμφανίζουμε ορισμένα μόνο πεδία μιας σχέσης ή και κάποιες άλλες πληροφορίες που αν δεν ήταν οι όψεις θα έπρεπε να δίνουμε κάθε φορά πολύπλοκες εντολές για να δούμε τις πληροφορίες που θέλουμε. Μπορούμε να δημιουργούμε, να τροποποιούμε και να διαγράφουμε όσες όψεις θέλουμε, χωρίς να επηρεάζονται καθόλου τα δεδομένα των σχέσεων στις οποίες αναφέρονται οι όψεις. Η όψη μπορεί να χρησιμοποιηθεί ως πίνακας σε ερωτήματα ή υποερώτημα SELECT υποερώτημα SELECT.

Για να δημιουργήσουμε μια όψη, δίνουμε την εντολή create view as, ως εξής :

Create view ΑΘΛΗΤΗΣ_1 as

(Select Κωδικός_Αθλητή, Επώνυμο, Ημνία_Γέννησης

From ΑΘΛΗΤΗΣ);

178. Τί είναι ένα ευρετήριο (index); Δώστε ένα παράδειγμα με χρήση κώδικα SQL.

Ένα ευρετήριο (index), είναι μια βοηθητική δομή αρχείου που κάνει πιο αποδοτική την αναζήτηση μιας εγγραφής σε ένα αρχείο. Το ευρετήριο καθορίζεται (συνήθως) σε ένα γνώρισμα του αρχείου που καλείται πεδίο ευρετηριοποίησης (indexing field).

π.χ. CREATE INDEX idx_lastname

ON Persons (LastName);

Παραπάνω δημιουργήσαμε ένα ευρετήριο με όνομα idx_lastname, πάνω στο πεδίο LastName του πίνακα Persons.

179. Ποια είναι η χρήση των stored procedures; Δώστε δύο παραδείγματα για τη δομή τους.

Μια stored procedure (αποθηκευμένη διαδικασία) είναι ένα τμήμα προγράμματος που αποθηκεύεται στον κατάλογο της Βάσης Δεδομένων και στη συνέχεια μπορεί να κληθεί από ένα πρόγραμμα ή μια άλλη stored procedure. Τα πλεονεκτήματα μίας stored procedure είναι τα εξής: ● Βελτιώνει την απόδοση μιας εφαρμογής. Όταν δημιουργηθεί, μεταγλωττίζεται και αποθηκεύεται στον κατάλογο της Βάσης Δεδομένων. Εκτελείται πιο γρήγορα από απλές SQL εντολές που δεν έχουν μεταγλωττιστεί. ● Μειώνει το επικοινωνιακό φορτίο μεταξύ της εφαρμογής και του εξυπηρετητή Βάσεων Δεδομένων. Αυτό συμβαίνει γιατί, αντί να στέλνονται μη μεταγλωττισμένες SQL εντολές, η εφαρμογή χρειάζεται να στείλει στον εξυπηρετητή μόνο το όνομα της stored procedure για να πάρει τα αποτελέσματα. ● Είναι επαναχρησιμοποιήσιμη για κάθε εφαρμογή. Διευκολύνει τον προγραμματιστή, ο οποίος δε χρειάζεται να δημιουργήσει συναρτήσεις για λειτουργίες που έχουν ήδη υλοποιηθεί σε μια stored procedure. Χρειάζεται απλώς να καλέσει την κατάλληλη stored procedure από το πρόγραμμά του. ● Είναι ασφαλής. Ο διαχειριστής του εξυπηρέτη Βάσεων Δεδομένων μπορεί να δώσει δικαιώματα χρήσης σε stored procedures που υπάρχουν αντί να δώσει δικαιώματα επεξεργασίας σε πίνακες της Βάσης Δεδομένων. Τα μειονεκτήματα των stored procedures είναι τα εξής: ● Αυξάνουν τον φόρτο του εξυπηρετητή Βάσεων Δεδομένων, τόσο από πλευράς επεξεργασίας, όσο και από πλευράς μνήμης. Αντί ο εξυπηρέτης να χρησιμοποιείται μόνο για την αποθήκευση και την ανάκτηση δεδομένων, θα πρέπει να εκτελεί ένα πλήθος από απλές έως πολύπλοκες εντολές των stored procedur es. ● Περιέχουν ένα σύνολο δηλωτικών εντολών σε SQL και δεν μπορούν να χρησιμοποιηθούν για πολύπλοκα προγράμματα που γίνονται παραδοσιακά με χρήση γλωσσών προγραμματισμού όπως C++, Java κτλ. ● Η ανίχνευση λαθών (debugging) σε μια stored procedure είναι δύσκολη. Κατά τη μεταγλώττιση δεν εμφανίζονται τα γνωστά μηνύματα λάθους που εμφανίζει ένας τυπικός μεταγλωττιστής.

Παραδείγματα

1)DELIMITER //

CREATE PROCEDURE GetAllMovies()

BEGIN

SELECT * FROM MOVIES;

END //

DELIMITER ;

Η πρώτη εντολή είναι η εντολή DELIMITER //. Η εντολή αυτή δε σχετίζεται με τη stored procedure.

Η εντολή DELIMITER στη MySQL χρησιμοποιείται για να αλλάξουμε το βασικό delimiter της MySQL που είναι το ελληνικό ερωτηματικό (;) σε κάποιον άλλο. Σε αυτή την περίπτωση ο delimiter αλλάζει από ελληνικό ερωτηματικό (;) σε //, ώστε να μπορούμε να έχουμε πολλαπλές SQL εντολές σε μια stored procedure που να διαχωρίζονται με το ελληνικό ερωτηματικό (;).

Για να δημιουργήσουμε μια νέα stored procedure χρησιμοποιούμε την εντολή CREATE PROCEDURE. Μετά την εντολή CREATE PROCEDURE γράφουμε το όνομα της stored procedure, το οποίο στην περίπτωσή μας είναι το GetAllMovies. To κυρίως τμήμα της stored procedure είναι ένα block που αρχίζει αρχίζει με την εντολή BEGIN και τελειώνει τελειώνει με την εντολή END. Σε αυτό το τμήμα μπορούμε να γράψουμε SQL εντολές. Μετά την εντολή END χρησιμοποιούμε το delimiter // για να δείξουμε το τέλος της stored procedure. Μετά την εντολή END της stored procedure θα πρέπει οπωσδήποτε να αλλάξoυμε πάλι τον delimiter στο ελληνικό ερωτηματικό (;) με χρήση της εντολής

DELIMITER ;

2) DELIMITER //

CREATE PROCEDURE GetMoviesByYear (IN inputYear INT)

BEGIN

SELECT id, title

FROM MOVIES

WHERE year = inputYear;

END //

DELIMITER ;

Η παραπάνω stored procedure, είναι procedure με παραμέτρους. Ο τύπος IN είναι ο default τύπος παραμέτρου. Όταν χρησιμοποιούμε το ΙΝ για μια παράμετρο, τότε η τιμή της παραμέτρου περνάει στη stored procedure αλλά οποιαδήποτε αλλαγή στην τιμή της παραμέτρου μέσα στη stored procedure δεν αλλάζει την αρχική τιμή της παραμέτρου. Xρησιμοποιήσαμε ως ΙΝ παράμετρο το inputYear με τύπο δεδομένων INT. Στο block της stored procedure που βρίσκεται ανάμεσα στις εντολές BEGIN και END, γράψαμε μια SQLερώτηση για να ανακτήσουμε όλες τις ταινίες οι οποίες δημιουργήθηκαν το έτος inputYear .

Αν υποθέσουμε ότι θέλουμε να ανακτήσουμε όλες τις ταινίες που δημιουργήθηκαν το έτος 2010. Τότε απλώς περνάμε ως παράμετρο το έτος 2010 στη stored procedure και την καλούμε ως εξής:

CALL GetMoviesByYear(2010);

180. Με τη χρήση κώδικα SQL δημιουργήστε ένα πίνακα ο οποίος στην πρώτη στήλη με τίτλο "Κωδικός" και τιμές 053, 109, 027, στη δεύτερη την ιδιότητα με τίτλο: "Όνομα" και τιμές: Παπαδόπουλου, Χατζηκώστα, Καρανίκα, στη τρίτη με τίτλο "Τηλέφωνο" και τιμές 21041111, 21033099, 21023322. Η κάθε στήλη θα έχει και τον αντίστοιχο τύπο δεδομένων.

CREATE TABLE Persons (

Κωδικός int,

Όνομα varchar(25),

Τηλέφωνο varchar(15),

);

INSERT INTO Persons (Κωδικός, Όνομα, INSERT INTO Persons (Κωδικός, Όνομα, Τηλέφωνο) Τηλέφωνο)

VALUES

(053,'Παπαδοπούλου' 21041111),

(109,'Χατζηκώστα' 21033099),

(027,'Καρανίκα' 21023322);

181. Τί είναι τα ψευδώνυμα και πού τα χρησιμοποιούμε; Εξηγήστε τον ακόλουθο κώδικα:

SELECT E.NAME, S.NAME FROM EMPLOYEE E, EMPLOYEE S WHERE E.SUPERSN=S.SN

Τα ψευδώνυμα χρησιμοποιούνται για λόγους συντόμευσης της γραφής της γλώσσας SQL. Ουσιαστικά μπορούμε να δώσουμε σε έναν πίνακα ή ακόμα και σε ένα πεδίο ψευδόνυμα για να μπορούμε να αναφερόμαστε σε αυτά με μεγαλύτερη ευκολία. Είναι δηλαδή, ένας προσωρινός τρόπος μετονομασίας, χωρίς το πραγματικό όνομα του πίνακα ή του π πίνακα ή του πεδίου να αλλάζει στη βάση. εδίου να αλλάζει στη βάση. Στο παραπάνω ερώτημα, έχουμε δώσει 2 ψευδώνυμα στον πίνακα EMPLOYEE (E και S). Μετέπειτα, ζητάμε δύο φορές το πεδίο NAME, μια φορά με το ψευδώνυμο E και μια φορά με το ψευδώνυμο S, κάνοντας join στον εαυτό του στα πεδία E.SUPERSN και S.SN.

182. Αν στο αποτέλεσμα ενός ερωτήματος πάρουμε ως απάντηση πολλαπλές πλειάδες πώς τις εξαλείφουμε; Δώστε ένα παράδειγμα σε SQL.

Χρησιμοποιούμε την εντολή DISNTICT.

π.χ. SELECT DISTINCT Country

FROM Customers;

Με το παραπάνω ερώτημα ζητάμε να μας φέρει όλες τις χώρες (Country) που βρίσκονται στον πίνακα Customers, χωρίς όμως να τις επαναλαμβάνει. Αν για παράδειγμα, στο πεδίο Country είχαμε καταχωρημένη πολλές φορές την Ελλάδα, χρησιμοποιώντας το DISTINCT μας τη φέρνει μόνο μία φορά.

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

Με την εντολή ORDER BY για αύξουσα σειρά και την εντολή ORDER BY DESC για φθίνουσα σειρά. π.χ. Αύξουσα αλφαβητική σειρά

SELECT * FROM Students

ORDER BY Name, Surmame;

Φθίνουσα αλφαβητική σειρά

SELECT * FROM Students

ORDER BY Surmame DESC;

184. Εξηγήστε τον ακόλουθο κώδικα:

SELECT ΝΑΜΕ

FROM WORKER W

WHERE EXISTS

(SELECT * FROM CONNECT C WHERE ID=C.CONNECT_ID AND W.Name=C.CONNECT_Name);

SELECT ΝΑΜΕ

FROM WORKER W WHERE EXISTS

(SELECT * FROM CONNECT C WHERE I (SELECT * FROM CONNECT C WHERE ID=C.CONNECT_ID AND D=C.CONNECT_ID AND

W.Name=C.CONNECT_Name);

Το παραπάνω query μας επιστρέφει τα ονόματα τον εργατών όπου υπάρχει το id του εργάτη στον πίνακα CONNECT και το όνομα του υπάρχει και στον πίνακα WORKER και στον CONNECT.

185. Δώστε 3 τύπους συνένωσης στην SQL (όχι το απλό JOIN) και για κάθε έναν από αυτούς δώστε ένα παράδειγμα με χρήση κώδικα SQL.

  • INNER JOIN: Το INNER JOIN επιλέγει όλες τις σειρές Το INNER JOIN επιλέγει όλες τις σειρές και από τους και από τους δύο πίνακες, εφόσον δύο πίνακες, εφόσον υπάρχει αντιστοιχία μεταξύ των στηλών. Εάν υπάρχει αντιστοιχία μεταξύ των στηλών. Εάν υπάρχουν εγγραφές στον πίνακα "Orders" που δεν έχουν αντιστοιχίες στους "Customers", αυτές οι παραγγελίες δεν θα εμφανιστούν.

SELECT Orders.OrderID, Customers.CustomerName

FROM Orders

INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

  • LEFT JOIN: Το LEFT JOIN επιστρέφει  όλες τις εγγραφές από τον αριστερό πίνακα ριστερό πίνακα (Customers), ακόμη και αν δεν υπάρχουν αντιστοιχίσεις στο δεξί πίνακα (Orders).

SELECT Customers.CustomerName, Orders.OrderID

FROM Customers

LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID

ORDER BY Customers.CustomerName;

  • RIGHT JOIN: Το RIGHT JOIN επιστρέφει όλες τις εγγραφές από το δεξιό πίνακα (Orders), ακόμα και αν δεν υπάρχουν αντιστοιχίσεις στον αριστερό πίνακα (Customers).

SELECT Orders.OrderID, Customers.LastName, Customers.FirstName

FROM Orders

RIGHT JOIN Orders ON Orders.CustomerID = Customers.CustomerID

ORDER BY Orders.OrderID;

186. Αναλύστε τη χρήση των συναρτήσεων στον αντικειμενοστραφή προγραμματισμό. Δώστε παράδειγμα πως οι συναρτήσεις καλούνται ως μηνύματα σύνδεσης μεταξύ τάξεων.

Η συνάρτηση (function) είναι ένας συνδυασμός οδηγιών/εντολών συνδυασμένων για να επιτευχθεί κάποιο αποτέλεσμα. Οι συναρτήσεις μπορούν να δεχθούν δεδομένα εισόδου και να δημιουργήσουν αποτέλεσμα επιστροφής. Εάν μια συνάρτηση δεν επιστρέφει ένα αποτέλεσμα, συνήθως ονομάζεται διαδικασία (procedure).

Απ την άλλη, οι μέθοδοι ("member functions") είναι παρόμοιες με τις συναρτήσεις, ανήκουν σε τάξεις ή αντικείμενα και συνήθως εκφράζουν τις λειτουργίες των αντικειμένων / τάξεων. Για παράδειγμα, ένα αντικείμενο τύπου Window συνήθως θα έχει δημόσιες (public) και ιδιωτικές (private) μεθόδους οι οποίες αντιστοιχούν στις λειτουργίες του αντικειμένου που ανήκουν.

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

Παρακάτω δίνεται η κλάση Box και στη συνέχεια φαίνεται πως οι μέθοδο της αξιοποιούνται  της στην ανταλλαγή μηνυμάτων - επικοινωνία  μεταξύ κλάσεων από την από την κλάση BoxDemo. κλάση BoxDemo.

class Box {

double width;

double height;

double depth;

Box(double x, double y, double z) {

width = x;

height = y;

depth = z;

}

double volume(){

return width * height * depth;

}

class BoxDemo {

Box mybox1 = new Box(10, 20, 15);

Box mybox2 = new Box(3, 6, 9);

double vol;

vol = mybox1.volu mybox1.volume();

System.out.pr System.out.println("Vol intln("Volume is " + vol);

vol = mybox2.volum mybox2.volume();

System.out.p System.out.println("Volume is " + rintln("Volume is " + vol);

187. Ποια από τα ακόλουθα είναι σωστά και ποια είναι λάθος; Αιτιολογήτε την απάντησή σας για κάθε περίπτωση.

Person p1 = new Student();

Person p2 = new PhDStudent();

PhDStudent phd1 = new Student();

Prof t1 = new Person();

Student s1 = new PhDStudent();

Person p1 = new Student();

Person p2 = new PhDStudent();

PhDStudent phd1 = new Student();

Prof t1 = new Person();

Student s1 = new PhDStudent();

Προκύπτει λογικά ότι η συσχέτιση μεταξύ των ανωτέρω κλάσεων είναι η εξής:

Student ISA Person

Prof ISA Person

Phd ISA Student (επειδή ισχύει Student ISA Person, ως εκ τούτου ισχύει PhD ISA Person)

Έτσι, λόγω της κληρονομικότητας οι προτάσεις PhDStudent phd1 = new Student(); και Prof t1 = new Person(); είναι σωστές. Απεναντίας, οι προτάσεις Student s1 = new PhDStudent();, Person p1 = new Student(); και Person p2 = new PhDStudent(); είναι λανθασμένες καθώς αντικείμενα κατώτερης τάξης δε μπορούν να καλέσουν constructors ανώτερων τάξεων.

188. Γιατί δεν μπορούμε να αφαιρέσουμε πεδία από μια subclass ενώ μπορούμε να προσθέσουμε;

Από τον ορισμό της υποκλάσης (μια υποκλάση κληρονομεί και επεκτείνει τα πεδία και τις μεθόδους της μητέρας κλάσης) δεν είναι δυνατόν η υποκλάση να μην αποτελέσει υπερσύνολο, αναφορικά με τις μεθόδους και τα πεδία της μητέρας κλάσης.

Αρκεί να αναλογιστούμε για παράδειγμα την περίπτωση του τετραγώνου και του κύβου, όπου εν προκειμένω το τετράγωνο είναι η μητέρα κλάση (με δυο τουλάχιστον πεδία μήκος και ύψος) και από την άλλη πλευρά η υποκλάση κύβος που επεκτείνει ουσιαστικά την μητέρα κλάση τετράγωνο να μην έχει τουλάχιστον τις δυο επίπεδες επίπεδες διαστάσεις - πεδία μήκος και ύψος αντίστοιχα. Τόσο κατά την αρχική υπόθεση όπου είχε αφαιρεθεί το ένα πεδίο της μητέρας κλάσης (μη κληρονόμιση) τετράγωνο όπου για παράδειγμα η κλάση κύβος είχε μόνο 2 πεδία π.χ. μήκος -βάθος, όσο και στην περίπτωση που δε προστίθενται περεταίρω πεδία (μη επέκταση) η κλάση κύβος θα ενέπιπτε στη κλάση τετράγωνο και ως εκ τούτου δε θα θεωρείτο υποκλάση.

189. Ποια είναι η διαφορά μεταξύ ενός Frame και ενός Dialog;

Ενώ αμφότερα το JFrame και το JDialog κληρονομούν τις ιδιότητες της κλάσης Window, ώστε να μοιράζονται πολλές λειτουργίες, το JFrame είναι ένα κανονικό παράθυρο με (προαιρετικά) κουμπιά και τις διακοσμήσεις, ενώ το JDialog από την άλλη πλευρά δεν έχει κουμπιά μεγιστοποίησης και ελαχιστοποίησης και συνήθως δημιουργείται με στατικές μεθόδους JOptionPane και είναι καλύτερα προσαρμοσμένο στις τροποποιήσεις του αναφορικά με το ότι μπλοκάρει άλλα components μέχρι ο χρήστης να το κλείσει.

190. Ποια είναι η διαφορά μεταξύ ενός αντικείμενου Menu και ενός MenuBar (σε Java);

Το Menu και το MenuBar είναι συστατικά στοιχεία πλοήγησης που υποστηρίζουν διάφορες λειτουργίες και εμφανίζουν επιλογές. Μπορούν να έχουν πολλαπλά επίπεδα υπο-Menu και τα στοιχεία Menu μπορούν είτε να ενεργοποιήσουν τις ενέργειες διακομιστή είτε να χρησιμεύσουν ως σύνδεσμοι σε εξωτερικές διευθύνσεις URL. Η κύρια διαφορά μεταξύ του Menu και του MenuBar είναι ότι το Menu εμφανίζεται κάθετα, ενώ το MenuBar εμφανίζεται οριζόντια. Ακόμη από κατασκευαστικής άποψης το Menu είναι υποκλάση του MenuBar. Έτσι, το MenuBar μπορεί να φιλοξενίσει πολλά Menu και κατ επέκταση MenuItems.

191. Ποια είναι η διαφορά μεταξύ ενός Menu και ενός MenuItem (σε Java);

Το Menu περιέχει τα στοιχεία του μενού. Το MenuItem εμφανίζει την πραγματική επιλογή που μπορεί να επιλέξει ο χρήστης μέσα σε ένα Menu. Τα στοιχεία του Menu (MenuItem-s) προστίθενται στο μενού με τη μέθοδο addMenuItem ().

192. Ποια είναι η διαφορά μεταξύ της επανεκκίνησης και της επαναφόρτωσης ενός Java applet;

Οι λειτουργίες επανεκκίνησης (Restart) και ανανέωσης (Reload) χρησιμοποιούνται για την επανεκκίνηση της εκτέλεσης της εφαρμογής. Η διαφορά μεταξύ αυτών των δύο επιλογών είναι ότι η επαναφόρτωση (Reload) εκφορτώνει την μικροεφαρμογή πριν την επανεκκίνησή της, ενώ η επανεκκίνηση (Restart) όχι. Η επιλογή επαναφόρτωση (Reload) ισοδυναμεί με το κλείσιμο του προγράμματος προβολής μικροεφαρμογών και το άνοιγμα ξανά στην ίδια ιστοσελίδα.

193. Τι είναι οι constructors στην JAVA; Δώστε ένα παράδειγμα.

Μια κλάση περιέχει constructors που καλούνται να δημιουργήσουν αντικείμενα από αντικείμενα από το πρότυπο της κλάσης. Οι δηλώσεις των constructors μοιάζουν με δηλώσεις μεθόδου - εκτός από το ότι χρησιμοποιούν το όνομα της κλάσης και δεν έχουν τύπο επιστροφής. Για παράδειγμα, το ποδήλατο έχει έναν constructor:

public Bicycle(int startCadence, int startSpeed, int startGear) {

gear = startGear;

cadence = startCadence;

speed = startSpeed;

}

Για να δημιουργήσουμε ένα νέο αντικείμενο Bicycle που ονομάζεται myBike, ένας constructor καλείται ως εξής:

Bicycle myBike = new Bicycle(30, 0, 8);

new Bicycle(30, 0, 8)

Eτσι, ο constructor δεσμεύει χώρο στη μνήμη για το αντικείμενο προετοιμάζοντας τα πεδία του.

194. Να αναφέρετε από ποια μέρη αποτελείται η Java Virtual Machine και ποιες μεθόδους τρέχει.

Μια εικονική μηχανή Java (JVM) είναι μια αφηρημένη υπολογιστική μηχανή που επιτρέπει σε έναν υπολογιστή να εκτελεί ένα πρόγραμμα Java. Υπάρχουν τρία συστατικά του JVM: το specification, το implementation, και το instance. Η προδιαγραφή (specification) είναι ένα έγγραφο που περιγράφει επίσημα τι απαιτείται για μια υλοποίηση της JVM. Έχοντας μια ενιαία προδιαγραφή διασφαλίζει ότι όλες οι υλοποιήσεις (implementations) είναι διαλειτουργικές (interoperable). Μια εφαρμογή JVM (JVM implementation) είναι ένα πρόγραμμα υπολογιστή που πληροί τις απαιτήσεις της προδιαγραφής (specification) JVM. Τέλος το στιγμιότυπο (instance) ενός JVM είναι μια υλοποίηση (implementation) που εκτελείται σε μια διαδικασία που εκτελεί ένα πρόγραμμα υπολογιστή που έχει συνταχθεί σε Java bytecode.

195. Ποιοι είναι οι τύποι μεταβλητών στην Java;

Οι τύποι μεταβλητών (variables) που εντοπίζονται στη Java είναι οι εξής:

a) Local variables

b) Instance variables

c) Class/Static variables

196. Τι κάνει το παρακάτω JAVA πρόγραμμα:int j=5; int k=10; long max=0; max=k>j?k:j;

Η σύνταξη βασίζεται στη δομή ελέγχου: condition ? first_expression : second_expression; Έτσι, ελέγχει αν το k είναι μεγαλύτερο του j και θέτει στο max τη τ έτει στο max τη τιμή του k αλλιώς (αν το j ιμή του k αλλιώς (αν το j είναι μεγαλύτερο) θέτει στο max τη τιμή του είναι μεγαλύτερο) θέτει στο max τη τιμή του j.

197. Ποιος ο ρόλος των εξαιρέσεων στα προγράμματα εισόδου / εξόδου; Δώστε δύο παραδείγματα σε JAVA.

Ο χειρισμός εξαιρέσεων (Exception Handling) είναι η διαδικασία αντίδρασης στην εμφάνιση, κατά τον υπολογισμό, εξαιρέσεων - ανώμαλων ή εξαιρετικών συνθηκών που απαιτούν ειδική επεξεργασία - αλλάζοντας συχνά την κανονική ροή εκτέλεσης του προγράμματος. Συγκεκριμένα, οι εξαιρέσεις εισόδου/εξόδου (IOExceptions) είναι η γενική κατηγορία εξαιρέσεων που παράγονται από αποτυχημένες ή διακοπείσες λειτουργίες εισόδου / εξόδου. Δυο παραδείγματα χρήσης αυτών παρατίθενται στη συνέχεια όπου εμφανίζονται τα trycatch κατά την εγγραφή σε αρχεία και την ανάγνωση αυτών.

import java.io.*;

import static java.nio.fil java.nio.file.StandardO e.StandardOpenOption.*; penOption.*;

import java.nio.fi java.nio.file.*; import java.io.*;

import java.nio.ch java.nio.charset.Charse arset.Charset;

public class Test {

public static void main(String[] args) {

String s = "Hello World! ";

byte data[] = byte data[] = s.getBytes() s.getBytes();

Path p = Paths.get(" Paths.get("C:\\Users\\Us C:\\Users\\User\\Desktop\ er\\Desktop\\test.txt"); \test.txt");

write_file(p,data);

read_file(p);

}

// Paradeigma xeirismou eggrafhs se arxeio me xrhsh IOException

public static void write_file(Path p,byte data[]){

try (OutputStream out = new BufferedOutputStr new BufferedOutputStream(

Files.newOutputStream(p, CREATE, APPEND))) {

out.write(da out.write(data, 0, data.length) data.length);

}

catch (IOException x) {

System.err.println(x);

}

}

// Paradeigma xeirismou anagnwshs apo arxeio me xrhsh IOException

public static void read_file(Path p){

Charset charset Charset charset = Charset.forN Charset.forName("US-ASCII ame("US-ASCII");

import java.io.*;

import static java.nio.fil java.nio.file.StandardO e.StandardOpenOption.*; penOption.*;

import java.nio.fi java.nio.file.*; import java.io.*;

import java.nio.ch java.nio.charset.Charse arset.Charset;

public class Test {

public static void main(String[] args) {

String s = "Hello World! ";

byte data[] = byte data[] = s.getBytes() s.getBytes();

Path p = Paths.get(" Paths.get("C:\\Users\\Us C:\\Users\\User\\Desktop\ er\\Desktop\\test.txt"); \test.txt");

write_file(p,data);

read_file(p);

}

// Paradeigma xeirismou eggrafhs se arxeio me xrhsh IOException

public static void write_file(Path p,byte data[]){

try (OutputStream out = new BufferedOutputStr new BufferedOutputStream(

Files.newOutputStream(p, CREATE, APPEND))) {

out.write(da out.write(data, 0, data.length) data.length);

}

catch (IOException x) {

System.err.println(x);

}

}

// Paradeigma xeirismou anagnwshs apo arxeio me xrhsh IOException

public static void read_file(Path p){

Charset charset Charset charset = Charset.forN Charset.forName("US-ASCII ame("US-ASCII");

try (BufferedReader reader = Files.newBufferedReader(p,

charset)) {

String line = null;

while ((line = reader.readLine()) != null) {

System.out.println(line);

}

}

catch (IOException x) {

System.err. System.err.format("IOE format("IOException: xception: %s%n", x);

}

}

}

198. Δημιουργήστε σε JAVA το παιχνίδι κρεμάλα (hangman). O χρήστης εισάγει γράμματα τα οποία και συγκρίνονται με λέξεις που επιλέγονται τυχαία από έναν πίνακα με λέξεις string. Μηνύματα επιτυχίας ή αποτυχίας εμφανίζονται στο χρήστη και τον καθοδηγούν για το αποτέλεσμα. Για διευκόλυνσή σας τοποθετήστε στον πίνακα 5 διαφορετικές λέξεις και το πρόγραμμά σας μην επεκταθείτε στη δημιουργία GUI.

package hangman;

import java.util.Arrays;

import java.util.Scanner;

public class Hangman{

public static void main(String[] args) {

String[] words = {"hello", String[] words = {"hello", "world","hungman","wrote "world","hungman","wrote","that","program"}; ","that","program"};

int randomWordNumber = (int) (Math.random() * words.length);

char[] enteredLetters = new char[words[randomWordNumber].length()];

int triesCount = 0;

boolean wordIsGuessed = false;

do {

switch (enterLetter(words[randomWordNumber], enteredLetters) dLetters)) {

case 0:

triesCount++;

break;

case 1:

triesCount++;

break; case 2:

break;

case 3:

wordIsGuessed = true;

break;

}

} while (! wordIsGuessed);

System.out.println("\nThe word is " + words[randomWordNumber] +

" You missed " + (triesCount - " You missed " + (triesCount -findEmptyPosition(ent findEmptyPosition(enteredLetters)) + eredLetters)) +

" time(s)");

}

public static public static int enterLetter(String int enterLetter(String word, char word, char[] enteredLetters) [] enteredLetters) {

System.out.print("(Guess) Enter a letter in word ");

if (! printWord(word, enteredLetters)){return 3;}

System.out.print(" > ");

Scanner input = new Scanner(System.in);

int emptyPosition = findEmptyPosition(enteredLetters);

char userInput = input.nextLine().charAt(0);

if (inEnteredLetters(userInput, enteredLetters)) {

System.out.println(userInput + " is already in the word");

return 2;

}

else if (word.contains(String.valueOf(userInput))) {

enteredLetters[emptyPosition] = userInput;

return 1; }

else {

System.out.println(userInput + " is not in the word");

return 0;

}

public static boolean printWord(String word, char[] enteredLetters) {

boolean asteriskPrinted = false;

for (int i = 0; i < for (int i = 0; i < word.length(); i++) { word.length(); i++) {

char letter = word.charAt(i);

if (inEnteredLetters(letter, enteredLetters))

System.out.print(letter);

else {

System.out.print('*');

asteriskPrinted = true;

}

}

return asteriskPrinted;

}

public static boolean inEnteredLetters(char letter, char[] enteredLetters) {

return new String(enteredLetters).contains(String.valueOf(letter));

}

public static int findEmptyPosition(char[] enteredLetters) {

int i = 0;

while (enteredLetters[i] != '\u0000') i++;

return i;

}

}

199. Να ορίσετε σε JAVA την κλάση Tires (Λάστιχα) με τις ακόλουθές ιδιότητες:width Πλάτος της επιφάνειας του ελαστικού (inches)radius Ακτίνα του ελαστικού (inches)rim Ζαντα (inches)type Τύπος ελαστικού0 - Παντός Καιρού1 - Ξηρό2 - Βροχή3 - Χιόνι brand Κατασκευαστής model Μοντέλο year έτος κατασκευής Να δημιουργήσετε constructor για την κλάση αυτή, ο ποιος να παίρνει παραμέτρους για όλα τα στοιχεία της κλάσης.

public class Tyre {

private static int width;

private static int radius;

private static int rim;

private static String type;

private static String brand;

private static String model;

private static int year;

public Tyre(int wd, int rd, int r public Tyre(int wd, int rd, int rm, String tp, Stri m, String tp, String br, String md, int yr) { ng br, String md, int yr) {

this.width = wd;

this.radius = rd;

this.rim = rm;

this.type = tp;

this.brand = br;

this.model = md;

this.year = yr;

System.out.println("Tyre created with the following specs:");

System.out.println("Tyre width= "+ this.width);

System.out.println("Tyre radius= "+ this.radius);

System.out.println("Tyre rim= "+ this.rim);

System.out.println("Tyre type= "+ this.type);

System.out.println("Tyre brand= "+ this.brand );

System.out.println("Tyre model= "+ this.model );

System.out.println("Tyre year= "+ this.year );

}

public static void main(String[] args){

int the_width=185;

int the_radius=60;

int the_rim=18;

String the_type="snow";

String the_brand="Michelin";

String the_model="all_terain_pro";

int the_year=2017;

Tyre my_car_tyre= newTyre(the_width,the_radius,the_rim,the_type,the_brand,the_model,the_year);

}

}

200. Ποια είναι η διαφορά μεταξύ μιας abstract class και ενός interface (σε Java);

Η abstract κλάση μπορεί να έχει αφηρημένες και μη αφηρημένες μεθόδους. Η interface μπορεί να έχει μόνο αφηρημένες μεθόδους. 2) Η abstract κλάση δεν υποστηρίζει πολλαπλή κληρονομικότητα. Η interface υποστηρίζει πολλαπλή κληρονομικότητα. 3) Η abstract κλάση μπορεί να έχει final, non-final, static και non-static μεταβλητές. Η interface έχει μόνο static και final μεταβλητές. 4) Η abstract κλάση μπορεί να προσφέρει την υλοποίηση της interface. Η interface δεν μπορεί να προσφέρει την υλοποίηση abstract κλάσης. 5) To keyword "abstract" χρησιμοποιείται για να δηλώσει δηλώσει abstract abstract κλάση. Στο interface, το αντίστοιχο keyword χρησιμοποιείται για να δηλώσει interface.7) Μια abstract κλάση μπορεί να επεκτείνει μια άλλη συγκεκριμένη (κανονική) κλάση ή abstract κλάση. Μια interface μπορεί να επεκτείνει μόνο μια άλλη interface 8) Σε μια abstract κλάση το keyword "abstract" είναι υποχρεωτικό για να δηλωθεί μια μέθοδος ως abstract. abstract. Σε ένα interface το interface το keyword "abstract" είναι προαιρετικό για να δηλωθεί μια μέθοδος ως abstract. 9) Μια abstract κλάση μπορεί ναέχει protected έχει protected και public abstract μεθόδους Μια interface μπορεί να έχει μόνο public abstract μεθόδους.

201. Τι είναι τα interfaces στην JAVA; Πώς δημιουργούμε ένα interface; Δώστε ένα παράδειγμα.

Η διεπαφή (interface) μοιάζει με κλάση, αλλά δεν είναι κλάση. Μια διεπαφή μπορεί να έχει μεθόδους και μεταβλητές όπως ακριβώς και η κλάση, αλλά οι μέθοδοι που δηλώνονται στη διεπαφή είναι από προεπιλογή αφηρημένες (abstract) (μόνο υπογραφή μεθόδου, χωρίς σώμα). Επίσης, οι μεταβλητές που δηλώνονται σε μια διεπαφή είναι public static και final από προεπιλογή. Δεδομένου ότι οι μέθοδοι στα interfaces δεν έχουν σώμα, πρέπει να υλοποιηθούν από τη κλάση πριν αποκτηθεί πρόσβαση. Η κλάση που υλοποιεί interface πρέπει να υλοποιήσει όλες τις μεθόδους αυτού του interface.

interfainterface MyInterface{

public void method1();

public void method2();

}

class Demo implements MyInterface{

public void method1(){

System.out.println("implementation of method1");

}

public void method2(){

System.out.println("implementation of method2"); }

public static void main(String arg[]){

MyInterface obj = new Demo();

obj.method1();

}

}

202. Γράψτε σε Java ένα πρόγραμμα που θα μετατρέπει την θερμοκρασία από βαθμούς Fahrenheit σε Celcius σημείωση: C = 5 (F - 32) / 9"

import javautil.Scanner;

public class Fahrenheit {

public static void main(String[] args) {

float temperatue;

Scanner in = new Scanner(System.in);

System.out.println ("Enter temperatue in Fahrenheit");

temperatue = in.nextInt();

temperatue = ((temperatue - 32)*5)/9;

System.out.println("Temperatue in Celsius = " + temperatue);

}

}

203. Γράψτε πρόγραμμα σε Java, το οποίο θα ζητάει από το χρήστη να εισάγει μία λίστα με 6 ονόματα στην αρχική του σειρά, θα ταξινομεί τα ονόματα με αύξουσα αλφαβητική σειρά και κατόπιν θα εμφανίζει ξανά τη λίστα.

import java.util.ArrayList;

import java.util.Scanner;

public class Test {

public static void main(String[] args) {

ArrayList<String> Names = new ArrayList<String>();

Scanner in = new Scanner(System.in);

String name;

String temp;

for(int i=0;i<5;i++){

System.out.print("give name:");

name= in.next();

Names.add(name);

}

System.out.println("List of names:"+Names);

for(int i=0;i<Names.size();i++){

for(int j=i+1;j<Names.size();j++){

if(Names.get(i).compareTo(Names.get(j))>0){

temp=Names.get(i);

Names.set(i, Names.get(j));

Names.set(j,temp );

}

}

}

System.out.println("List of names in alphabetical order:"+Names);

}

}

204. Τι είναι το Method Overloading; Δώστε ένα παράδειγμα με χρήση κώδικα Java.

Η μέθοδος "Overloading" είναι μια δυνατότητα που επιτρέπει σε μια κλάση να έχει περισσότερες από μία μεθόδους με το ίδιο όνομα, εάν τα argument lists τους είναι διαφορετικά. Είναι παρόμοιο με την υπερφόρτωση του constructor που επιτρέπει σε μια κλάση να έχει περισσότερους από έναν constructors που έχουν διαφορετικά argument lists.

class DisplayOverloading {

public void disp(char c) {

System.out.println(c);

}

public void disp(char disp(char c, int num) {

System.out.println(c + " "+num);

}

}

class Sample{

public static void main(String args[]) {

DisplayOverloading obj = new DisplayOverloading();

obj.disp('a');

obj.disp('a',10);

}

}

205. Τι είναι το Method Overriding; Δώστε ένα παράδειγμα με χρήση κώδικα Java.

Η δήλωση μιας μεθόδου στην υποκλάση που υπάρχει ήδη στην γονική κλάση είναι γνωστή ως μέθοδος overriding. Η παράκαμψη γίνεται έτσι ώστε μια κλάση παιδιού να μπορεί να δώσει τη δική της implementation σε μια μέθοδο που παρέχεται ήδη από τη μητρική κλάση. Σε αυτήν την περίπτωση, η μέθοδος στην γονική κλάση ονομάζεται overridden μέθοδος και η μέθοδος στην κατηγορία παιδιού ονομάζεται overriding μέθοδος. Στο παράδειγμα η eat() στη κλάση Boy κάνει override την eat() στη κλάση Human.

class Human{

public void eat(){

System.out.println("Human is eating");

}

}

class Boy extends Human{

public void eat(){

System.out.println("Boy is eating");

}

public static void main( String args[]) {

Boy obj = new Boy();

obj.eat();

}

}

206. Εξηγήστε αναλυτικά τον παρακάτω κώδικα: interface MyInterface{ public void method1();public void method2(); } class XYZ implements MyInterface {

public void method1(){System.out.println(""implementation of method1"");}

public void method2(){System.out.println(""implementation of method2"");}

public static void main(String arg[]){MyInterface obj=new XYZ(); obj.method1();}}

Αυτός είναι ο τρόπος με τον οποίο μια κλάση υλοποιεί μια διεπαφή. Πρέπει να παρέχει το σώμα όλων των μεθόδων που δηλώνονται στη διεπαφή ή με άλλα λόγια ότι η κλάση πρέπει να εφαρμόσει όλες τις μεθόδους της διεπαφής.

Το interface ΜyInterface περιέχει τις μεθόδους void method1() και void method2(), των οποίων την υλοποίηση παρέχει η κλάση XYZ (στην ουσία κάνουν από μια εκτύπωση η κάθε μια).

Τέλος η main δημιουργεί ένα αντικείμενο της κλάσης ΧΥΖ (το obj) και πάnω σε αυτό καλείται η μέθοδος method1() η οποία και τυπώνει το μήνυμα implementation of method1.

package inventory;

import java.util.Enumeration;

import java.util.Scanner;

import java.util.Vector;

public class Inventory {

private String inventory_it inventory_item;

public Inventory(String item){

this.inventory_item=item;

System.out.println( this.inventory_item+" added to the

inventory");

}

public static void main(String[] args) {

Scanner SC = new Scanner(System.in);

System.out.print("Define invenotry capacity: ");

int invenotry_size = SC.nextInt();

String item;

Vector<Inventory> invenotry_list = new

Vector<Inventory>(invenotry_size) notry_size);

for(int i=0; i<invenotry_size;i++){

System.out.print("\nset item to be adde to the inventory: "); item = SC.next();

Inventory new_item=new Inventory(item);

invenotry_list.addEleme st.addElement(new_item);

}

System.out.print("\n\nInventory contains: ");

for(int i=0; i<invenotry_size;i++){

System.out.print(invenotry_list.get try_list.get(i).inventory_item+ ", ");

}

}

}

207. Δημιουργήστε (σε Java) το class inventory χρησιμοποιώντας Vector Arrays μέσα στο inventory όπου εμπεριέχονται αντικείμενα τύπου string[ ] με χαρακτηριστικά όπλων π.χ mithril sword, Plate Armour κτλ.

208. Δημιουργήστε (σε Java) το πρόγραμμα Print(), που εκτυπώνει μέσω κληρονομικότητας στην οθόνη το αποτέλεσμα των τάξεων: sum, που προσθέτει αριθμούς integer, sub, που αφαιρεί αριθμούς integer και multiply που πολλαπλασιάζει αριθμούς integer.

package calculator;

import java.lang.Math;

import java.util.Scanner;

class Summary{

public static int add(int a, int b){

return Math.addExact(a, b);

}

}

class Subtract extends Summary{

public static int sub(int a, int b){

int c=b*(-1);

return add(a, c);

}

}

class Multiplication extends Summary{

public static int multi(int a, int b){

int result=0;

for(int i=0;i<b; (result=add(a, result);} result);}

return result;

}

}

public class Calculator {

private static int x;

private static int y;

public Calculator( public Calculator(int a, int int a, int b){

this.x=a;

this.y=b;

}

public static void main(String[] args) {

int factor_1,factor_2;

Scanner SC = new Scanner (System.in);

System.out.print ("\nset factor 1: ");

factor_1= SC.nextInt();

System.out.print ("\nset factor 2: ");

factor_2= SC.nextInt();

Calculator result= new Calculator(factor_1,factor_2);

print(result);

}

public static void print(Calculator input){ lator input){

System.out.println ("sum="+Summary m="+Summary.add (input.x, input.y));

System.out.println("sub="+Subtract.sub(input.x, input.y));

System.out.println ("mlt="+Multipl t="+Multiplication.multi(input.x, input.y));

}

}

209. Δημιουργήστε (σε Java) την τάξη Rectangle, την τάξη Square και την τάξη Circle η κάθε μία περιέχει τουλάχιστον 3 μεταβλητές και μια συνάρτηση που υπολογίζει το εμβαδόν τους. Οι τάξεις Square και Circle κληρονομούν από την τάξη Rectangle τις μεταβλητές της, υπολογίζουν και εκτυπώνουν το εμβαδόν τους (εμβαδό κύκλου = 2*3.14*R*R, εμβαδό τετραγώνου = Width*Width).

package shapes;

public class Rectangle{

public int width = 0;

public int height = 0;

public static String color[];

public Rectangle(in public Rectangle(int w, int h, String cl[]){

width = w;

height = h;

System.arraycopy(color, 0, cl, 0, cl.length);

}

public int getArea(){

return width * height;

}

}

----------------------------------------------------------------------------------------------------

public class Square extends Rectangle{

public Square(int w,int h, String cl[]){

super(w,h,cl);

}

public int getArea(){

return width * height;

}}

----------------------------------------------------------------------------------------------------

public class Circle extends Rectangle{

public Circle(int w,int h,String cl[]){

super(w,h,cl);

}

public double getCircleArea(){

return width*2*3.14*3.14;

}

}

210. Να γραφεί συνάρτηση σε OpenGL που να σχεδιάζει ένα επίπεδο (plane).

void drawAPlane(){

glBegin(GL_QUADS);

glVertex3f(-1,-1, 0);

glVertex3f(-1,1, 0);

glVertex3f(1, -1, 0);

glEnd();

}

211. Σε τι οφείλουμε το γεγονός ότι η OpenGL μπορεί να δείξει από 256 έως δισεκατομμύρια χρώματα χωρίς να χρειαστεί να ξαναγράψουμε ή να ξανακάνουμε compile τον κώδικα;

Η OpenGL υποστηρίζει το χρωματικό μοντέλο RGB, σε μια ελαφρώς εκτεταμένη μορφή. Προσθέτει μια τέταρτη συνιστώσα στο χρώμα, η οποία ονομάζεται alpha και παίζει το ρόλο "συντελεστής διαφάνειας". Ο "συντελεστής διαφάνειας" χρησιμοποιείται όταν συνδυάζονται τα χρώματα μεταξύ τους. Το αναθεωρημένο μοντέλο ονομάζεται μοντέλο RGBA. Τα χρώματα στην OpenGL προσδιορίζονται καθορίζοντας τιμές για το χρωματικό μοντέλο RGBA μεταξύ 0.0 και 1.0. Για παράδειγμα η εντολή glColor3f (0.0f , 0.0f , 1.0f , 1.0f); // (R, G, B, A) // (R, G, B, A) καθορίζει το μπλέ χρώμα με πλήρη αδιαφάνεια.

212. Η OpenGL χρησιμοποιεί μια απλή, βασική, μορφή ονοματολογίας για τις εντολές της. Αναφέρατε ποιαείναι αυτή και παραθέστε παράδειγμα.

Οι εντολές OpenGL χρησιμοποιούν το πρόθεμα gl και αρχικά κεφαλαία γράμματα για κάθε λέξη που συνθέτει το όνομα της εντολής (π.χ. gClearColor()). Πολλές από τις συναρτήσεις της δέχονται προκαθορισµένα ορίσµατα (συµβολικές σταθερές) που αρχίζουν με GL_, γράφονται με κεφαλαία γράμματα και οι λέξεις διαχωρίζονται με κάτω παύλα (π.χ. GL_COLOR_BUFFER_BIT). Πολλές εντολές χρησιμοποιούν αριθμούς και γράμματα ως επίθυμα (suffix) για να μπορούμε να χρησιμοποιούμε διαφορετικό αριθμό και τύπο ορισμάτων. Π.χ. η εντολή glVertex3f glVertex3f(); δηλώνει ότι ως όρισματα δέχεται 3 float αριθμούς.

213. Αναφέρατε τι ονομάζουμε GLUT στην OpenGL. Για ποιο λόγο δημιουργήθηκε και ποιες βασικές λειτουργίες προσφέρει;

Το πρότυπο της OpenGL είναι ανεξάρτητο πλατφόρµας, περιορίζεται όμως στη δυνατότητα εμφάνισης του προγράμματος. Η OpenGL Utility Toolkit (GLUT) είναι μια βιβλιοθήκη η οποία προσφέρει εντολές εισόδου- εξόδου προσφέροντας έτσι δυνατότητα αλληλεπίδρασης του χρήστη του προγράμματος με αυτό. Η βιβλιοθήκη GLUT περιλαµβάνει εντολές απεικόνισης παραθύρων στην οθόνη, δηµιουργίας menus, διαχείρισης γεγονότων κλπ. Όλες οι εντολές της ξεκινούν µε το πρόθεµα glut.

214. Με ποια εντολή δημιουργούμε ένα τρισδιάστατο ορθογραφικό παράθυρο με διαστάσεις: αριστερά -3, δεξιά 3, πάνω 3, κάτω -3 και clipping planes στα 1 και 100 για το near και far αντίστοιχα (στην OpenGL);

glOrtho (-3.0f, 3.0f, -3.0f, 3.0f, 1.0f, 100.0f);

215. Εξετάστε την ισχύ των παρακάτω προτάσεων δηλώνοντας ΣΩΣΤΟ ή ΛΑΘΟΣ και εξηγώντας την επιλογή σας (Όπου κρίνετε απαραίτητο, παραθέστε παράδειγμα). α) 1. Τα επικρατέστερα Λειτουργικά Συστήματα (Windows, Unix, Linux, Mac OS) υποστηρίζουν την OpenGL. β) Η OpenGL μπορεί αποκλειστικά να κληθεί (is callable) από τις γλώσσες προγραμματισμού C / C++ (δηλαδή υπάρχει μοναδικό language binding). γ) Το μοναδικό περιβάλλον ανάπτυξης προγραμμάτων OpenGL είναι το DEV C++. δ) Η OpenGL περιέχει εντολές επιλογής (τύπου If ... else). ε) Οι εντολές της OpenGL ξεκινούν με το πρόθεμα gl.

α)Τα επικρατέστερα Λειτουργικά Συστήματα (Windows, Unix, Linux, Mac OS)υποστηρίζουν την OpenGL.

Σωστό. Η OpenGL είναι ανεξάρτητη λειτουργικού συστήματος και συνήθως αλληλεπιδρά με την κάρτα γραφικών ώστε να πετύχει ταχύτερη απόδοση γραφικών.

β) Η OpenGL μπορεί αποκλειστικά να κληθεί (is callable) από τις γλώσσες προγραμματισμού C / C++ (δηλαδή υπάρχει μοναδικό language binding).

Σωστό. Μια βιβλιοθήκη που υλοποιεί το πρότυπο της OpenGL µπορεί να συνταχθεί σε οποιαδήποτε γλώσσα προγραµµατισµού (η OpenGL είναι πρότυπο ανεξάρτητο πλατφόρµας).

γ) Το μοναδικό περιβάλλον ανάπτυξης προγραμμάτων OpenGL είναι το DEV C++.

Λάθος. Η OpenGL είναι ένα σύνολο εντολών (Application Programming Interface - API) που μας επιτρέπει την δημιουργία τριδιάστατων γραφικών. Δεν είναι γλώσσα προγραμματισμού αλλά μπορεί να χρησιμοποιηθεί με μια πληθώρα γλωσσών προγραμματισμού (C, C++, Java και άλλες). Συνεπώς DEV C++ δεν είναι το μοναδικό περιβάλλον ανάπτυξης προγραμμάτων.

δ) Η OpenGL περιέχει εντολές επιλογής (τύπου If ... else).

Σωστό. H OpenGL χρησιμοποιεί μια μηχανή καταστάσεων (state machine) για να επικοινωνεί με την εφαρμογή. Σε αυτή την μηχανή καταστάσεων η OpenGL παραμένει διαρκώς σε μια κατάσταση μέχρι να αλλάξει η εφαρμογή την κατάσταση

ε) Οι εντολές της OpenGL ξεκινούν με το πρόθεμα gl.

Σωστό. Οι εντολές OpenGL χρησιμοποιούν το πρόθεμα gl και αρχικά κεφαλαία γράμματα για κάθε λέξη που συνθέτει το όνομα της εντολής (π.χ. glClearColor()). Πολλές από τις συναρτήσεις της δέχονται προκαθορισµένα ορίσµατα (συµβολικές σταθερές) που αρχίζουν με GL_, γράφονται με κεφαλαία και οι λέξεις διαχωρίζονται με κάτω παύλα (π.χ. GL_COLOR_BUFFER_B (π.χ. GL_COLOR_BUFFER_BIT).

216. Ποια η λειτουργία των παρακάτω εντολών στην OpenGL και τι παραμέτρους δέχονται; Να δοθεί παράδειγμα.α) glutInitWindowPosition β) glutInitWindowSize γ) glutCreateWindow

Η glutInitWindowPosition(int x, int y); καθορίζει τη θέση στην οθόνη, στην οποία θα εμφανιστεί το παράθυρο της εφαρμογής (συντεταγμένη της άνω αριστερής κορυφής) όπου x παράμετρος η απόσταση του παραθύρου σε pixels από την πάνω αριστερή γωνία της οθόνης στον άξονα X και y παράμετρος η απόσταση του παραθύρου σε pixels από την πάνω αριστερή γωνία της οθόνης στον άξονα Υ . π.χ. glutInitWindowPosition(150,150); Το παράθυρο θα τοποθετηθεί 150,150 pixels από την πάνω αριστερή γωνία της οθόνης.

Η glutInitWindowSize(int width, int height); καθορίζει το πλάτος και ύψος του παραθύρου της εφαρμογής σε pixels όπου width το πλάτος του παραθύρου σε pixels και height το μήκος του παραθύρου σε pixels. Π.χ. glutInitWindowSize(400, 400); // Το παράθυρο θα έχει μέγεθος 400×400 pixels.

Η glutCreateWindow(char *name); εµφανίζει το παράθυρο της εφαρµογής στην οθόνη και του αποδίδει έναν τίτλο. Π.χ. glutCreateWindow("ΙΕΚ ΔΕΛΤΑ OPENGL"); // Το παράθυρο θα έχει τον τίτλο ΙΕΚ ΔΕΛΤΑ OPENGL.

217. Περιγράψτε τρεις βασικές βιβλιοθήκες εντολών της OpenGL που περιέχουν εντολές σχεδίασης, γραφικών και απόδοσης. Σε ποιο σημείο του προγράμματος δηλώνονται;

OpenGL core library

Βασική βιβλιοθήκη (OpenGL core library ή GL):

Η βασική βιβλιοθήκη της OpenGL έχει σχεδιαστεί ως μια βελτιωμένη διεπαφή ανεξάρτητη από το hardware, περιέχει τις κύριες εντολές σχεδίασης όπως η σχεδίαση βασικών γεωµετρικών σχημάτων, ο ορισμός χρωμάτων κλπ. Όλες οι εντολές της βιβ ορισμός χρωμάτων κλπ. Όλες οι εντολές της βιβλιοθήκης αυτής διακρίνονται από το πρόθεμα gl. Πολλές από τις συναρτήσεις της δέχονται προκαθορισμένα ορίσματα (συμβολικές σταθερές) τα οποία έχουν οριστεί στη βιβλιοθήκη και αντιστοιχούν και αντιστοιχούν σε διάφορες παραμέτρους ή καταστάσεις λειτουργίας. Οι σταθερές αυτές ξεκινούν με το πρόθεμα GL_.

OpenGL Utility Library (GLU):

Η βιβλιοθήκη GLU είναι χτισμένη πάνω στην κορυφή της OpenGL και περιλαμβάνει συναρτήσεις που εκτελούν σύνθετους αλγορίθμους όπως π.χ. τον καθορισμό μητρώων προβολής και το σχηματισμό σύνθετων καμπυλών και επιφανειών. Κάθε υλοποίηση της OpenGL εμπεριέχει τη βιβλιοθήκη GLU. Όλες οι εντολές της βιβλιοθήκης GLU με το πρόθεμα glu_ (π.χ.gluLookAt, gluPerspective).

OpenGL Utility Toolkit (GLUT):

Η OpenGL είναι ένας γρήγορος και ευέλικτος τρόπος για την επικοινωνία με το hardware των γραφικών του υπολογιστή χωρίς να ενδιαφέρουν το χρήστη οι λεπτομέρειες υλοποίησης του. Από την άλλη, δεν προσφέρει καθόλου λειτουργίες GUI (Graphical User Interface), δηλαδή δεν έχει τη δυνατότητα να ανοίξει και να κλείσει παράθυρα στο λειτουργικό σύστημα, να ζωγραφίσει σε αυτά, ούτε να καταλάβει το πάτημα ενός πλήκτρου ή την κίνηση του ποντικιού, ούτε μπορεί να διαβάσει ένα αρχείο από το δίσκο. Μια από τις πιο διαδεδομένες βιβλιοθήκες για αυτό το σκοπό είναι το GLUT (OpenGL Utility Toolkit) που είναι και αυτή σχεδιασμένη (η εργαλειοθήκη) να τρέχει σε πολλά λειτουργικά συστήματα. Η GLUT προσφέρει ένα σύνολο εντολών που αναλαμβάνουν να ανοίξουν και να κλείσουν εύκολα παράθυρα, να καταγράψουν το πάτημα ενός πλήκτρου ή την κίνηση του ποντικιού). Η βιβλιοθήκη αυτή περιλαμβάνει ακόμη εντολές απεικόνισης παραθύρων στην οθόνη, δημιουργία μενού, κλπ. Όλες οι εντολές της ξεκινούν με το πρόθεμα glut_.

Οι βιβλιοθήκες που χρησιμοποιούνται στο πάνω μέρος του προγράμματος από τις εντολές

#include <gl\gl.h>

#include <gl\glu.h>

#include <gl\glut.h>

218. Αναφέρετε την λειτουργία της glutMainLoop() στην OpenGL. Σε ποιο σημείο πρέπει να καλείται;

Η glutMainLoop glutMainLoop() ενεργοποιεί τον κύκλο διαχείρισης γεγονότων (event processing loop). Στον κύκλο αυτό, η εφαρµογή αναµένει επ' άπειρον και ανταποκρίνεται σε γεγονότα, όπως λ.χ. στο πάτηµα ενός κουµπιού, στην αλλαγή του σκηνικού ή στην κίνηση του ποντικιού. Από το πρόθεµά της, παρατηρούµε ότι η συγκεκριµένη εντολή εµπεριέχεται στη βιβλιοθήκη GLUT, αφού το πρότυπο της OpenGL, ως πρότυπο ανεξάρτητο πλατφόρµας, δεν ορίζει διαδικασίες εισόδου - εξόδου

219. Ποια είναι τα πλεονεκτήματα χρήσης μιας πλατφόρμας CMS (Content Management System), σε σχέση με την δημιουργία εκ νέου ενός web site;

⦁ Ορθολογική και εύκολη διαδικασία συγγραφής άρθρων.

⦁ Ταχύτερος χρόνος ολοκλήρωσης για νέες σελίδες και αλλαγές.

⦁ Μεγαλύτερη συνοχή στην πλοήγηση του δικτυακού τόπου.

⦁ Δυνατότητα επεκτασιμότητας της ιστοσελίδας.

⦁ Υποστήριξη χρηστών με συγκεκριμένα δικαιώματα.

⦁ Αυξημένη ασφάλεια.

⦁ Μειωμένο κόστος συντήρησης site.

⦁ Πολλές επιλογές για καλό SEO.

⦁ Όμορφο design, γραφικά και εφέ.

220. To σύστημα διαχείρισης περιεχομένου (CMS) υποστηρίζει την εγκατάσταση διαφόρων modules. Τι είναι τα modules και γιατί είναι χρήσιμα για ένα CMS;

Το Module στα CMS, είναι μια συλλογή αρχείων κώδικα, που προσθέτει επιπλέον λειτουργίες στην ιστοσελίδα μας. Απαραίτητη προϋπόθεση για να δουλέψει το module, είναι να εγκαταστήσουμε πρώτα το core code του CMS που θα χρησιμοποιήσουμε. Στη συνέχεια, αν θέλουμε να επεκτείνουμε την ιστοσελίδα μας με επιπλέον λειτουργίες (π.χ υποστήριξη forum, social media buttons κλπ), εγκαθιστούμε το module που μας ενδιαφέρει. Για κάθε CMS η έννοια του module, έχει διάφορες σημασίες. Πιο συγκεκριμένα: ● Wordpress: Δεν υπάρχει καθόλου η λέξη modules. Αντί αυτής, χρησιμοιείται η λέξη plugin και widget. ● Joomla: Εδώ τα modules, είναι στην ουσία «κουτιά», τα οποία ενσωματώνονται γύρω από ένα component (π.χ article), προσθέτοντας νέες λειτουργίες. ● Drupal: Εδώ τα modules είναι ένας γενικός όρος για κώδικα, που προσθέτει επιπλέον λειτουργίες. Τα modules του Drupal, ουσιαστικά αντιστοιχούν στα plugins που έχει το wordpress.

221. Στην διάρκεια κατασκευής μιας ιστοσελίδας πολλές φορές καλούμαστε να προσθέσουμε alt και title tags. Τι είναι το καθένα απ' αυτά και για ποιο σκοπό χρησιμοποιούνται; Είναι απαραίτητη ή προαιρετική η συμπλήρωσή τους;

Τα tags alt και title, χρησιμοποιούνται για λόγους SEO κατά τη διάρκεια κατασκευής μιας ιστοσελίδας. Όταν λέμε SEO (Search Engine Optimization) εννοούμε όλες τις τεχνικές που χρησιμοποιούνται, για να καταφέρει η ιστοσελίδα μας να βγει ψηλά στις μηχανές αναζήτησης

Ένας βασικός παράγοντας για πετυχημένο SEO είναι το είναι το title tag, στο οποίο θα πρέπει να βάζουμε το όνομα της σελίδας. Για να καταλάβουμε πόσο σημαντικό είναι το title tag, αρκεί να δούμε πως η Google είναι το πρώτο που εμφανίζει στα αποτελέσματά της για μια ιστοσελίδα και ακριβώς από κάτω εμφανίζει το description της ιστοσελίδας. Το title λοιπόν θα πρέπει να υποδηλώνει το περιεχόμενο μιας συγκεκριμένης σελίδας.

To alt tag, είναι ένας ακόμα βασικός παράγοντας SEO και ουσιαστικά είναι μια επιπρόσθετη πληροφορία για το περιεχόμενο μιας φωτογραφίας. Με το alt tag, περιγράφουμε τι βρίσκεται μέσα στη φωτογραφία και χρησιμοποιείται από Screen Readers, browsers για ανθρώπους με προβλήματα όρασης κ.α.

Τέλος, υπάρχει και το title tag που προστίθεται σε μια φωτογραφία (επιπλέον από το alt tag) και αυτό περιγράφει ένα πιο γενικό περιεχόμενο της φωτογραφίας. Επίσης το title tag της φωτογραφίας χρησιμοποιείται και σαν tooltip από ορισμένους browsers (Firefox, Opera) εμφανίζοντάς το, όταν αφήνουμε τον κέρσορα του ποντικιού πάνω στη φωτογραφία. Επιτυγχάνουμε δηλαδή, καλύτερη «εμπειρία χρήστη» (user experience), κάτι που οι μηχανές αναζήτησης επιθυμούν ώστε να συμπεριλάβουν μια ιστοσελίδα στα αποτελέσματά τους

222. Η επιστήμη του SEO (Serch Engine Optimization), δίνει μεγάλη βαρύτητα στην σωστή συμπλήρωση τριών tags (title tag, keyword tag, description tag). Τι ακριβώς είναι το καθένα από αυτά τα tags και με ποιον τρόπο γίνεται η σωστή επιλογή του περιεχομένου τους, έτσι ώστε η ιστοσελίδα να ανταποκρίνεται στα κριτήρια σωστής διάρθρωσης της επιστήμης SEO;

Title tag: To title tag είναι ένας από τους πιο βασικούς παράγοντες για SEO. Υποδηλώνει το περιεχόμενο της ιστοσελίδας και δε θα πρέπει να ξεπερνάει τους 66 χαρακτήρες. Αυτοί οι 60 χαρακτήρες θα πρέπει να αποτελούνται από τις λέξεις κλειδιά που θέλουμε να χρησιμοποιήσουμε, με τις πιο σημαντικές λέξεις να βρίσκονται στην αρχή του title. Για να καταλάβουμε πόσο σημαντικό είναι το title tag, αρκεί να δούμε πως η Google είναι το πρώτο που εμφανίζει στα αποτελέσματά της για μια ιστοσελίδα και ακριβώς από κάτω εμφανίζει για μια ιστοσελίδα και ακριβώς από κάτω εμφανίζει το description της ιστοσελίδας.

Keyword tag: Το keyword tag, είναι ένα metatag στο οποίο βάζουμε keywords τα οποία είναι οι βασικές λέξεις-κλειδιά της ιστοσελίδας μας και είναι ορατά μόνο από τις μηχανές αναζήτησης (όχι από τους επισκέπτες). Τα keywords που μπαίνουν στο keyword-tag χρησιμοποιούνται σαν ranking factor από τις μηχανές αναζήτησης. Παλιότερα, το keyword-tag, ήταν αρκετό για να πετύχουμε υψηλά αποτελέσματα στις μηχανές αναζήτησης. Το 2009, η Google, το Yahoo και το Bink ανακοίνωσαν ότι δε θα χρησιμοποιούν το keyword-tag σαν κριτήριο κατάταξης, οπότε, και πλέον έχει χάσει την αξία του.

Description tag: Το description tag, περιγράφει με περισσότερη λεπτόμερεια το περιεχόμενο μιας ιστοσελίδας και εμφανίζεται ακριβώς κάτω από το title στα αποτελέσματα της Google. To description δε θα πρέπει να ξεπερνάει τους 160 χαρακτήρες. Και εδώ θα πρέπει να δοθεί ιδιαίτερη προσοχή στις λέξεις που θα γράψουμε, με τις πιο σημαντικές λέξεις-κλειδιά να πρέπει να γράφονται στην αρχή του description

223. Μετά την υλοποίηση της ιστοσελίδας με χρήση CMS τοπικά, ποια βήματα πρέπει να γίνουν ώστε να " ανέβει" (upload) στο Internet;

Τα βήματα που πρέπει να γίνουν ώστε να ανέβει η CMS ιστοσελίδα μας στο διαδίκτυο είναι:

  • Αγορά domain name (όνομα ιστοσελίδας στο διαδίκτυο) και web hosting(υπολογιστής που θα φιλοξενεί την ιστοσελίδα μας).
  • Εξαγωγή τοπικής βάσης δεδομένων (συνηθίζεται για εύκολη εξαγωγή το phpmyadmin).
  • Ανέβασμα wordpress files στον κατάλληλο φάκελο που βρίσκεται στον public_html, αν μιλάμε για linux server (για μεταφορά αρχείων μπορεί να χρησιμοποιηθεί ένας FTP client π.χ. Filezilla).
  • Δημιουργία MySQL Βάσης στον web hosting μας.
  • Εισαγωγή της παλιάς βάσης στη νέα βάση που δημιουργήσαμε.

224. Τι είναι τα σχεδιαστικά χνάρια και ποια η χρησιμότητα τους;

Η χρήση σχεδιαστικών χναριών είναι μια αρκετά πρόσφατα υιοθετημένη πρακτική από την επιστήμη της ηλεκτρονικής μάθησης, η οποία αποδεικνύεται ιδιαίτερα αποτελεσματική, ιδιαίτερα σε περιπτώσεις στις οποίες ο σχεδιαστής ενός συστήματος στερείται μεγάλης εμπειρίας, καθώς βοηθά στον αποτελεσματικό σχεδιασμό χωρίς να απαιτείται «εκ νέου ανακάλυψη του τροχού». Η έννοια του σχεδιαστικού χναριού είχε περιγραφεί αρχικά από τον Alexander ως επαναχρησιμοποιούμενες λύσεις για την αντιμετώπιση προβλημάτων αρχιτεκτονικής σχεδίασης τα οποία προκύπτουν με μεγάλη συχνότητα. Συγκεκριμένα, «ένα χνάρι περιγράφει ένα πρόβλημα που προκύπτει κατ' επανάληψη και το οποίο περιγράφει τον πυρήνα της λύσης του προβλήματος αυτού, με τέτοιο τρόπο που η λύση αυτή να εφαρμοστεί πολλαπλές φορές, χωρίς να χρειαστεί να ακολουθηθεί ο ίδιος τρόπος δεύτερη φορά». Η χρήση ενός CMS (Wordpress, Joomla, Drupal) είναι ένα παράδειγμα σχεδιαστικού χναριού, αφού ελαχιστοποιεί τον παράγοντα ανθρώπινου κόπου χάρη στην ευκολία χρήσης του και την προσαρμοστικότητά του

Τέλος Γενικού 

ΔΙΕΚ ΑΙΓΙΝΑΣ 2021 - 2023 ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ
Υλοποιήθηκε από τη Webnode Cookies
Δημιουργήστε δωρεάν ιστοσελίδα! Αυτή η ιστοσελίδα δημιουργήθηκε με τη Webnode. Δημιουργήστε τη δική σας δωρεάν σήμερα! Ξεκινήστε