Monday, June 25, 2012

Object Oriented Programming Day 2 - Working with Class(1) : Class Properties

Previous Section : Basic Concepts in OOP(Completed)


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
 
Copyright (c) 2010 printf("hello world"); and Powered by Blogger.