ιδιότητες αντικειμένου

Ξεκίνησε από maryangel, 10 Απρ 2022, 06:56:05 ΜΜ

« προηγούμενο - επόμενο »

maryangel

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

Μια ιδιότητα ενός αντικειμένου μπορεί να αλλάξει τιμή αν τρέξουμε μια μέθοδο του ίδιου του αντικειμένου (π.χ. αντικείμενο: κουμπαράς- ιδιότητα: υπόλοιπο- μέθοδος: βγάζω_χρήματα() )

Είναι δυνατόν να αλλάξει τιμή μια ιδιότητα αν τρέξουμε μια μέθοδο διαφορετικού αντικειμένου; 

Ευχαριστώ εκ των προτέρων για τις απαντήσεις. :) 

pgrontas

Ναι, μπορεί να μη θεωρείται καλή πρακτική αλλά δεν απαγορεύεται.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

maryangel

Στις σημειώσεις που κυκλοφορούν από το  "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 

Τι ισχύει τελικά; 

pgrontas

#3
Ξανα-απαντώ:
Στην πρακτική του OOP πολλές ιδιότητες μπορούν να μαρκαριστούν ως public. Αυτό σημαίνει ότι μπορούν να διαβαστούν αλλά ή/και να αλλάξουν από οποιοδήποτε άλλο τμήμα κώδικα. Άρα μπορεί να γίνει. Πχ. σε μια κλάση μόνο με ιδιότητες, απόγονο (sic) των struct της C, πρέπει να μπορούμε να τις αλλάξουμε από οπουδήποτε.
Δεν σημαίνει όμως ότι πρέπει να γίνει, γιατί παραβιάζει τον σκοπό της ενθυλάκωσης.

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

Κατά τη γνώμη μου πρόκειται για κακή ερώτηση. Μια καλύτερη θα ήταν: Παραβιάζει η μεταβολή των ιδιοτήτων ενός αντικειμένου από άλλο αντικείμενο τον σκοπό της ενθυλάκωσης; Εδώ απαντάμε ναι.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

dpa2006

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

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]
Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

alkisg

Access Levels
ModifierClassPackageSubclassWorld
publicYYYY
protectedYYYN
no modifierYYNN
privateYNNN

Όπου γράφει "Υ" στον παραπάνω πίνακα, επιτρέπεται η πρόσβαση, οπότε μειώνεται η ενθυλάκωση.
Την ενθυλάκωση θέλουμε να την μεγιστοποιούμε αλλά μερικές φορές είναι βολικότερο (π.χ. απόδοση/αναγνωσιμότητα/βαρεμάρα) να την καταστρατηγήσουμε.
Αν αυτό δεν ήταν αποδεκτό, δεν θα υπήρχαν καν τα access levels για ιδιότητες...

maryangel

Ευχαριστώ πολύ για τις απαντήσεις! :)