CodeBetter.Com
CodeBetter.Com
RSS 2.0 via Feedburner
           Do you Twitter? Follow us @CodeBetter

Raymond Lewallen

Framework Design, Agile Coach, President Oklahoma City Developers Group, Microsoft MVP C#, TDD, Continuous Integration, Patterns and Practices, Domain Driven Design, Speaker, VB.Net, C# and Sql Server

Encapsulation Defined

For you new programmers or programmers new to OOP, this is the first of 4 posts that will briefly explain the 4 major principles that make a language object-oriented: Data Abstraction, Encapsulation, Polymorphism and Inheritence. All examples will be in VB.Net, because in my opinion its easier for a new OOP programmer to read and understand at first. Certainly don't think I'm saying you should use one .Net based language over another, as they all are based on the CLR/CLS and all end up as the same assembly language when compiled. Its your preference that determines what language you use.  Of course, there are other OOP languages out there, such as Ruby, a pure OOP language, and hybrid languages such as Python, C++ and Java to mention a few.

What is encapsulation? Well, in a nutshell, encapsulation is the hiding of data implementation by restricting access to accessors and mutators. First, lets define accessors and mutators:

Accessor
An accessor is a method that is used to ask an object about itself. In OOP, these are usually in the form of properties, which have, under normal conditions, a get method, which is an accessor method. However, accessor methods are not restricted to properties and can be any public method that gives information about the state of the object.
Public Class Person

' We use Private here to hide the implementation of the objects
' fullName, which is used for the internal implementation of Person.
Private fullName As String = "Raymond Lewallen"

' This property acts as an accessor. To the caller, it hides the
' implementation of fullName and where it is set and what is
' setting its value.
It only returns the fullname state of the
' Person object, and nothing more.
From another class, calling
' Person.FullName() will return "Raymond Lewallen".
' There are other things, such as we need to instantiate the
' Person class first, but thats a different discussion.
Public ReadOnly Property FullName() As String Get Return fullName
End Get End Property End Class
Mutator Mutators are public methods that are used to modify the state of an object, while hiding the implementation of exactly how the data gets modified. Mutators are commonly another portion of the property discussed above, except this time its the set method that lets the caller modify the member data behind the scenes.
Public Class Person

' We use Private here to hide the implementation of the objects
' fullName, which is used for the internal implementation of Person.
Private fullName As String = "Raymond Lewallen"

' This property now acts as an accessor and mutator. We still
' have hidden the implementation of fullName.
Public Property FullName() As String Get Return fullName
End Get Set(ByVal value As String)
fullName = value
End Set End Property End Class
Ok, now lets look at a different example that contains an accessor and a mutator:
Public Class Person

Private fullName As String = "Raymond Lewallen" ' Here is another example of an accessor method,
' except this time we use a function.
Public Function GetFullName() As String Return fullName
End Function ' Here is another example of a mutator method,
' except this time we use a subroutine.
Public Sub SetFullName(ByVal newName As String)
fullName = newName
End Sub End Class
So, the use of mutators and accessors provides many advantages. By hiding the implementation of our Person class, we can make changes to the Person class without the worry that we are going to break other code that is using and calling the Person class for information. If we wanted, we could change the fullName from a String to an array of single characters (FYI, this is what a string object actually is behind the scenes) but they callers would never have to know because we would still return them a single FullName string, but behind the scenes we are dealing with a character array instead of a string object. Its transparent to the rest of the program. This type of data protection and implementation protection is called Encapsulation. Think of accessors and mutators as the pieces that surround the data that forms the class.

Next to come: Abstraction, which is closely tied to encapsulation.

Currently listening to: Renegade Master - Fatboy Slim


Comments

TrackBack said:

# February 11, 2005 5:55 AM

TrackBack said:

# February 14, 2005 5:59 PM

TrackBack said:

# February 17, 2005 5:44 AM

TrackBack said:

# March 16, 2005 8:14 PM

David Hayden said:

 I received an email message via this blog for some help in identifying good recources on OOP and...
# January 18, 2006 7:16 PM

Leave a Comment

(required)  
(optional)
(required)  

Enter the numbers above:
Add

About Raymond Lewallen

Working primarily in the public sector during his career, Raymond has designed and built several high profile enterprise level applications for all levels of the government. Raymond now works as a solutions architect for EMC. Raymond is an agile coach, Microsoft MVP C# and also president of the Oklahoma City Developers Group and Oklahoma Agile Developers Group. Raymond spends a lot of his time learning and teaching such things as Test Driven Development, Domain Driven Design, Design Patterns and Extreme Programming practices and principles, to name a few. Raymond is also an advocate of Alt.Net. Raymond is primarily a framework guy, so don't ask him anything about UI :) Check out Devlicio.us!