Enforcement of proper encapsulation in coding practices
class User
public
attr_accessor :name, :email, :password
end
In the code snippet above, we have a class
User
with three fields:
name
,
email
, and
password
. The
attr_accessor
method is used to create getter and setter methods for these fields.
However, the
public
keyword before
attr_accessor
means that these fields can be accessed and modified from outside of the class. This violates the principle of encapsulation, which is a fundamental concept in object-oriented programming.
Encapsulation is meant to hide the internal states and values of an object and only allow them to be accessed and modified through methods. By having these fields as public, we risk exposing sensitive data (such as the
password
field) and allow them to be changed in ways that the class is not designed to handle. This can lead to data corruption and potential security risks.
class User
private
attr_writer :name, :email, :password
public
def name
@name
end
def email
@email
end
def password
@password
end
def name=(value)
@name = value
end
def email=(value)
@email = value
end
def password=(value)
@password = value
end
end
The updated code respects the encapsulation principle by making the fields private and providing public getter and setter methods for accessing and modifying the field values.
1. The 'public' keyword has been removed from the class definition.
2. The 'attr_accessor' method has been replaced with individual getter and setter methods for each field.
3. The fields have been made private by using the 'private' keyword.
4. Getter methods have been defined to access the field values. These methods simply return the value of the corresponding field.
5. Setter methods have been defined to modify the field values. These methods take a value as an argument and assign it to the corresponding field.
6. Any necessary validation or logic can be added within the getter and setter methods.
7. Any references to the fields within the class should now use the getter and setter methods instead of directly accessing the fields.