Dalam
mempelajari OOP, memahami konsep class dan object adalah modal utama. Jika
kedua konsep dasar dikuasai insyaAllah untuk lajut ke konsep berikutnya akan
lebih mudah. Karena Class merupakan salah satu konsep inti OOP maka saya rasa
perlu dibahas pertama kali. Selama mempelajari OOP istilah class dan object akan
sangat sering ditemui. Tidak perlu berlama-lama, saya coba sedikit deskripsikan
mengenai 2 konsep tersebut.
Class
Secara
konsep, class dapat dideskripsikan sebagai blueprint atau rancangan
object. Sebuah class pasti memiliki
properties yang dimiliki semua objek yang masuk ke class tersebut. Setiap class
mempunya 2 properti utama, yaitu attribute dan method. Attribute adalah sifat
dasar yang dimiliki setiap object yang termasuk dalam suatu class. Sedangkan
method adalah suatu operasi yang mungkin dilakukan pada objek dari suatu class
yang bisa mengubah nilai atribut suatu object. Oleh karena itu dikenal konsep
access modifier. Konsep ini digunakan untuk membatasi akses class lain ke suatu
class tertentu. Semisal ada class Square yang merupakan blueprint dari semua
bentuk segiempat berarturan yaitu persegi dan persegi panjang. Untuk menentukan
properties apa saja yang dimiliki class Square, maka harus dianalisa hal apa
saja yang dimiliki semua jenis segi empat. Kita tau bahwa semua segi empat
pasti memiliki 5 sifat utama. Semua segi empat pasti mempunya panjang, lebar,
Keliling, dan Luas dan posisi. Sehingga dapat disimpulkan bahwa Class Square
memiliki 5 atribut, yaitu panjang, lebar, luas, keliling dan posisi. Untuk
posisi sendiri bisa dianggap class lain, karena posisi bisa terdiri dari posisi
koordiat X dan koordinat Y.
Untuk
method dari Square tentu saja beberapa operasi yang mungkin dilakukan pada
class Square, yaitu antara lain memberi nilai atrribut, mendapatkan nilai attribute,
menghitung luas, mendapatkan luas, menghitung keliling dan mendapatkan
kelilingnya.
Object
Object merupakan
instance dari suatu class. Analoginya adalah seperti individu dari populasi.
Jadi jika Object adalah individu dari suatu populasi, maka class adalah
kumpulan individu sejenis. Sejenis disini maksudnya mempunyai properties yang
sama.
Impelementasi
Untuk bagian ini
sebelumnya harus menguasai terlebih dahulu tentang konsep dasar bahasa pemrograman
yang sesuai, misalanya input-output, deklarasi variabel, deklarasi fungsi dan
aturan dasar yang
lain. Kali ini coba saya berikan contoh implementasi sederhana berkaitan dengan
konsep Class dan Object.
Impelementasi ini saya buat dalam 3
bahasa pemrograman umum yang mendukung konsep OOP. Yaitu C++, C# dan Java.
C++ Code
Dalam
mengimplementasikan di bahasa C++ setidaknya harus ada 2 file untuk setiap
class ditambah 1 file main untuk testing. Karena class yang akan dibuat ada 2
file, 1 file header(*.h) yang fungsinya mendefinisakan atribut dan prototype
method 1 file implementasi(*.cpp) untuk implementasi fungsi, maka setidaknya
ada 5 file yang diperlukan untuk sesi ini.
Position.h
#pragma once
class Position
{
// Attributes
private: //
attribut access modifier is set to private
int x;
int y;
// Methods Prototypes
public: //
attribut access modifier is set to public
Position(void);
void setPosition(int
x, int y);
int getX();
int getY();
~Position(void);
};
Position.cpp
#include "Position.h"
Position::Position(void)
{
this->x = 0;
this->y = 0;
}
void Position::setPosition(int x, int y)
{
this->x = x;
this->y = y;
}
int Position::getX()
{
return this->x;
}
int Position::getY()
{
return this->y;
}
Position::~Position(void)
{
}
Square.h
#pragma once
#include "Position.h"
class Square
{
private:
int width;
int height;
int area;
int circumtance;
Position
position;
public:
Square(void);
void setWidth(int
width);
void setHeight(int
height);
void setPosition(int
x, int y);
void calculateCircumtance();
void calculateArea();
int getWidth();
int getheight();
int getPositionX();
int getPositionY();
int getCircumtance();
int getArea();
~Square(void);
};
Square.cpp
#include "Square.h"
Square::Square(void)
{
this->area = 0;
this->circumtance = 0;
this->width = 0;
this->height = 0;
}
void Square::setWidth(int width)
{
this->width = width;
}
void Square::setHeight(int height)
{
this->height = height;
}
void Square::setPosition(int x, int y)
{
this->position.setPosition(x, y);
}
void Square::calculateCircumtance()
{
this->circumtance = 2 * (this->width
+ this->height);
}
void Square::calculateArea()
{
this->area = this->width
* this->height;
}
int Square::getWidth()
{
return this->width;
}
int Square::getheight()
{
return this->height;
}
int Square::getPositionX()
{
return this->position.getX();
}
int Square::getPositionY()
{
return this->position.getX();
}
int Square::getCircumtance()
{
return this->circumtance;
}
int Square::getArea()
{
return this->area;
}
Square::~Square(void)
{
}
Main.cpp
#include <iostream>
#include <string>
#include "Square.h"
using namespace
std;
void printProperties(Square square,
string instanceName)
{
cout
<< "Properties of " <<
instanceName << endl;
cout
<< "Width\t\t: " <<
square.getWidth() << endl;
cout
<< "Height\t\t: " <<
square.getheight() << endl;
cout
<< "Position\t: " <<
square.getPositionX() << ","
<< square.getPositionY() << endl;
cout
<< "Before Calculation"
<< endl;
cout
<< "Circumstance\t: "
<< square.getCircumtance() << endl;
cout
<< "Area\t\t: " <<
square.getArea() << endl;
square.calculateArea();
square.calculateCircumtance();
cout
<< "After Calculation"
<< endl;
cout
<< "Circumstance\t: "
<< square.getCircumtance() << endl;
cout
<< "Area\t\t: " <<
square.getArea() << endl << endl;
}
int main()
{
Square
s1; // s1 is an instance of Class Square
Square
s2; // s2 is an instance of Class Square, note that
s1 != s2
cout
<< "Before initialization"
<< endl;
printProperties(s1,
"s1");
printProperties(s2,
"s2");
// initilize s1 and s2
s1.setWidth(100);
s1.setHeight(100);
s1.setPosition(5,
10);
s2.setWidth(150);
s2.setHeight(50);
s2.setPosition(15,
30);
cout
<< "After initialization"
<< endl;
printProperties(s1,
"s1");
printProperties(s2,
"s2");
// edit s1 and s2
s1.setWidth(200);
s1.setHeight(100);
s1.setPosition(10,
10);
s2.setWidth(190);
s2.setHeight(90);
s2.setPosition(155,
20);
cout
<< "After edit" <<
endl;
printProperties(s1,
"s1");
printProperties(s2,
"s2");
system("pause");
return 0;
}
C# Code
Dalam mengimplementasikan
di bahasa C# setidaknya harus ada 1 file untuk setiap class ditambah 1 file
main untuk testing. Maka setidaknya ada
3 file yang diperlukan untuk sesi ini.
Position.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CSharpImplementation
{
class Position
{
// attributes
set to private
private
int x;
private
int y;
// methods
set to public
public
Position()
{
this.x
= 0;
this.y
= 0;
}
public void setPosition(int
x, int y)
{
this.x
= x;
this.y
= y;
}
public int getX()
{
return
this.x;
}
public int getY()
{
return
this.y;
}
}
}
Square.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CSharpImplementation
{
class Square
{
private
int width;
private
int height;
private
int area;
private
int circumtance;
private
Position position;
public
Square()
{
this.position
= new Position();
this.area
= 0;
this.circumtance
= 0;
this.width
= 0;
this.height
= 0;
}
public void setWidth(int
width)
{
this.width
= width;
}
public void setHeight(int
height)
{
this.height
= height;
}
public void setPosition(int
x, int y)
{
this.position.setPosition(x,
y);
}
public void calculateCircumtance()
{
this.circumtance
= 2 * (this.width + this.height);
}
public void calculateArea()
{
this.area
= this.width * this.height;
}
public int getWidth()
{
return
this.width;
}
public int getheight()
{
return
this.height;
}
public int getPositionX()
{
return
this.position.getX();
}
public int getPositionY()
{
return
this.position.getX();
}
public int getCircumtance()
{
return
this.circumtance;
}
public int getArea()
{
return
this.area;
}
}
}
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CSharpImplementation
{
class Program
{
public static void
printProperties(Square square, string instanceName)
{
Console.WriteLine("Properties of " + instanceName);
Console.WriteLine("Width\t\t: " + square.getWidth());
Console.WriteLine("Height\t\t: " + square.getheight());
Console.WriteLine("Position\t: " + square.getPositionX() +
"," + square.getPositionY());
Console.WriteLine("Before Calculation");
Console.WriteLine("Circumstance\t: " +
square.getCircumtance());
Console.WriteLine("Area\t\t: " + square.getArea());
square.calculateArea();
square.calculateCircumtance();
Console.WriteLine("After Calculation");
Console.WriteLine("Circumstance\t: " +
square.getCircumtance());
Console.WriteLine("Area\t\t: " + square.getArea());
}
static void Main(string[]
args)
{
Square
s1 = new Square();
// s1 is an instance of Class Square
Square
s2 = new Square();
// s2 is an instance of Class Square, note that s1 !=
s2
Console.WriteLine("Before initialization");
printProperties(s1, "s1");
printProperties(s2, "s2");
//
initilize s1 and s2
s1.setWidth(100);
s1.setHeight(100);
s1.setPosition(5, 10);
s2.setWidth(150);
s2.setHeight(50);
s2.setPosition(15, 30);
Console.WriteLine("After initialization");
printProperties(s1, "s1");
printProperties(s2, "s2");
// edit
s1 and s2
s1.setWidth(200);
s1.setHeight(100);
s1.setPosition(10, 10);
s2.setWidth(190);
s2.setHeight(90);
s2.setPosition(155, 20);
Console.WriteLine("After edit");
printProperties(s1, "s1");
printProperties(s2, "s2");
Console.ReadKey();
}
}
}
Java Code
Dalam mengimplementasikan
di bahasa C# setidaknya harus ada 1 file untuk setiap class ditambah 1 file
main untuk testing. Maka setidaknya ada
3 file yang diperlukan untuk sesi ini.
Position.java
package
javaimplementation;
/**
*
* @author Rohmad
* @access public
*/
public
class Position {
// attributes set to private
private int x;
private int y;
// methods set to public
public Position() {
this.x = 0;
this.y = 0;
}
public void setPosition(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return this.x;
}
public int getY() {
return this.y;
}
}
Square.java
package
javaimplementation;
/**
*
* @author Rohmad
* @access public
*/
public
class Square {
private int width;
private int height;
private int area;
private int circumtance;
private Position position;
public Square() {
this.position = new Position();
this.area = 0;
this.circumtance = 0;
this.width = 0;
this.height = 0;
}
public void setWidth(int width) {
this.width = width;
}
public void setHeight(int height) {
this.height = height;
}
public void setPosition(int x, int y) {
this.position.setPosition(x, y);
}
public void calculateCircumtance() {
this.circumtance = 2 * (this.width +
this.height);
}
public void calculateArea() {
this.area = this.width * this.height;
}
public int getWidth() {
return this.width;
}
public int getheight() {
return this.height;
}
public int getPositionX() {
return this.position.getX();
}
public int getPositionY() {
return this.position.getX();
}
public int getCircumtance() {
return this.circumtance;
}
public int getArea() {
return this.area;
}
}
Main.java
package
javaimplementation;
import
java.io.IOException;
import
java.util.logging.Level;
import
java.util.logging.Logger;
/**
*
* @author Rohmad
*/
public
class Main {
public static void printProperties(Square
square, String instanceName) {
System.out.println("Properties of
" + instanceName);
System.out.println("Width\t\t:
" + square.getWidth());
System.out.println("Height\t\t:
" + square.getheight());
System.out.println("Position\t:
" + square.getPositionX() + "," + square.getPositionY());
System.out.println("Before
Calculation");
System.out.println("Circumstance\t: " +
square.getCircumtance());
System.out.println("Area\t\t: "
+ square.getArea());
square.calculateArea();
square.calculateCircumtance();
System.out.println("After
Calculation");
System.out.println("Circumstance\t: " +
square.getCircumtance());
System.out.println("Area\t\t: " +
square.getArea());
}
public static void main(String[] args) {
try {
Square s1 = new Square(); // s1 is
an instance of Class Square
Square s2 = new Square(); // s2
is an instance of Class Square, note that s1 != s2
System.out.println("Before
initialization");
printProperties(s1,
"s1");
printProperties(s2,
"s2");
// initilize s1 and s2
s1.setWidth(100);
s1.setHeight(100);
s1.setPosition(5, 10);
s2.setWidth(150);
s2.setHeight(50);
s2.setPosition(15, 30);
System.out.println("After
initialization");
printProperties(s1,
"s1");
printProperties(s2,
"s2");
// edit s1 and s2
s1.setWidth(200);
s1.setHeight(100);
s1.setPosition(10, 10);
s2.setWidth(190);
s2.setHeight(90);
s2.setPosition(155, 20);
System.out.println("After
edit");
printProperties(s1,
"s1");
printProperties(s2,
"s2");
System.in.read();
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Output
Area : 7500
After
edit
Properties
of s1
Width : 200
Height : 100
Position : 10,10
Before
Calculation
Circumstance : 400
Area : 10000
After
Calculation
Circumstance : 600
Area : 20000
Properties
of s2
Width : 190
Height : 90
Position : 155,155
Before
Calculation
Circumstance : 400
Area : 7500
After
Calculation
Circumstance : 560
Area : 17100
That's it today's tutorial. Offline Tutorial(.docx) plus Source in all Languages available in link below.
Source codes developed in Visual Studio 2010(C++ and C#) and Netbeans 7.1.2(Java)
Next Section will be available soon, so stay tuned :p