Μία ερώτηση παρακαλώ, για τους πιο έμπειρους προγραμματιστές σε αντικειμενοστρεφή (από μένα τουλάχιστον :) )
Μια ιδιότητα ενός αντικειμένου μπορεί να αλλάξει τιμή αν τρέξουμε μια μέθοδο του ίδιου του αντικειμένου (π.χ. αντικείμενο: κουμπαράς- ιδιότητα: υπόλοιπο- μέθοδος: βγάζω_χρήματα() )
Είναι δυνατόν να αλλάξει τιμή μια ιδιότητα αν τρέξουμε μια μέθοδο διαφορετικού αντικειμένου;
Ευχαριστώ εκ των προτέρων για τις απαντήσεις. :)
Ναι, μπορεί να μη θεωρείται καλή πρακτική αλλά δεν απαγορεύεται.
Στις σημειώσεις που κυκλοφορούν από το "2 ο ΠΕ.Κ.Ε.Σ. Βορείου Αιγαίου" του Συρρή Ιωάννη " Αντικειμενοστραφής προγραμματισμός Πληροφορική Γ' ΓΕ.Λ. 2019 - 2020" γράφει στην 11η διαφάνεια: " Δεν μπορεί μία μέθοδος ενός αντικειμένου να μεταβάλει τις ιδιότητες ενός άλλου αντικειμένου".
https://blogs.sch.gr/webinarspe1920/files/2020/03/Webinar-57-%CE%94%CE%99%CE%91%CE%A6%CE%91%CE%9D%CE%95%CE%99%CE%A3-%CE%A3%CF%85%CF%81%CF%81%CE%AE%CF%82-%CE%99%CF%89%CE%AC%CE%BD%CE%BD%CE%B7%CF%82_%CE%91%CE%BD%CF%84%CE%B9%CE%BA%CE%B5%CE%B9%CE%BC%CE%B5%CE%BD%CE%BF%CF%83%CF%84%CF%81%CE%B1%CF%86%CE%AE%CF%82-%CF%80%CF%81%CE%BF%CE%B3%CF%81%CE%B1%CE%BC%CE%BC%CE%B1%CF%84%CE%B9%CF%83%CE%BC%CF%8C%CF%82-%CE%93-%CE%93%CE%95%CE%9B.pdf
Τι ισχύει τελικά;
Ξανα-απαντώ:
Στην πρακτική του OOP πολλές ιδιότητες μπορούν να μαρκαριστούν ως public. Αυτό σημαίνει ότι μπορούν να διαβαστούν αλλά ή/και να αλλάξουν από οποιοδήποτε άλλο τμήμα κώδικα. Άρα μπορεί να γίνει. Πχ. σε μια κλάση μόνο με ιδιότητες, απόγονο (sic) των struct της C, πρέπει να μπορούμε να τις αλλάξουμε από οπουδήποτε.
Δεν σημαίνει όμως ότι πρέπει να γίνει, γιατί παραβιάζει τον σκοπό της ενθυλάκωσης.
Εδώ μπορούμε να κάνουμε μεγάλη κουβέντα για το ποια είναι τα όρια της ενθυλάκωσης: απόλυτα (θεωρία) ή ελαστικά (πράξη). Δεν νομίζω ότι έχει νόημα.
Κατά τη γνώμη μου πρόκειται για κακή ερώτηση. Μια καλύτερη θα ήταν: Παραβιάζει η μεταβολή των ιδιοτήτων ενός αντικειμένου από άλλο αντικείμενο τον σκοπό της ενθυλάκωσης; Εδώ απαντάμε ναι.
Αυστηρώς όχι,αλλά μπορεί να υπάρξουν γλώσσες που να υποστηρίζουν τη μαζική μεταβολή παραμέτρων...
By using properties and methods, you can modify a single object or a whole collection of objects
https://docs.microsoft.com/en-us/office/vba/word/concepts/objects-properties-methods/understanding-objects-properties-and-methods
Μια άλλη περίπτωση...
https://stackoverflow.com/questions/40711574/python-methods-modify-original-vs-return-a-different-object
An immutable object cannot be modified, but of course it can be replaced. The usual Python convention is that functions & methods that operate on a mutable object perform the operation in-place and return
None
, they don't return the modified original. OTOH, there are some functions that behave like the
sorted
function, which can be given a mutable or immutable collection to sort, but it always returns the result in a new list and doesn't modify the original even if it is mutable. Intenaly,
sorted
creates a new list from the input collection, sorts that new list in-place, and returns it.
– [color=var(--theme-link-color)]PM 2Ring[/font][/size][/color]
[color=var(--black-350)]Nov 21, 2016 at 1:49 [/font][/size][/color]
Access Levels
Modifier | Class | Package | Subclass | World |
public | Y | Y | Y | Y |
protected | Y | Y | Y | N |
no modifier | Y | Y | N | N |
private | Y | N | N | N |
Όπου γράφει "Υ" στον παραπάνω πίνακα, επιτρέπεται η πρόσβαση, οπότε μειώνεται η ενθυλάκωση.
Την ενθυλάκωση θέλουμε να την μεγιστοποιούμε αλλά μερικές φορές είναι βολικότερο (π.χ. απόδοση/αναγνωσιμότητα/βαρεμάρα) να την καταστρατηγήσουμε.
Αν αυτό δεν ήταν αποδεκτό, δεν θα υπήρχαν καν τα access levels για ιδιότητες...
Ευχαριστώ πολύ για τις απαντήσεις! :)