SlideShare a Scribd company logo
1 of 50
Download to read offline
Pemrograman Berorientasi Objek pada VB.NET                                 Hendra, S.T.




           Pemrograman Berorientasi Objek pada VB.Net
                                  Oleh : Hendra, ST.




    Buku ini membahas tentang konsep dasar pemrograman berorientasi objek (OOP) dan
 bagaimana melakukannya pada VB.NET, serta memberikan contoh-contoh keunggulan OOP
                    dibandingkan dengan pendekatan konvensional.

 Penguasaan terhadap teknik pengembangan berorientasi objek merupakan suatu nilai tambah
  bagi programmer dewasa ini, karena trend bahasa pemrograman menuju kearah pendekatan
             OOP, terutama sejak kemunculan Java yang 100% menerapkan OOP.

 Penulis yakin bagian ini merupakan hal yang tersulit bagi programmer yang ingin melakukan
     migrasi dari VB6 ke VB.NET, karena OOP merupakan hal yang benar-benar baru.

  Untuk mempelajari buku ini anda tidak perlu menginstalasi Visual Studio .NET, tetapi anda
   cukup menginstalasi .Net Framework yang dapat didownload secara gratis dari website
                                         Microsoft.

   Semua contoh dan latihan dibuku ini dapat dikompilasi langsung dari Dos prompt dengan
  menggunakan kompiler Visual Basic yang langsung tersedia setelah anda menginstalasi .Net
                                        Framework.




INDOPROG                                                                             1
Pemrograman Berorientasi Objek pada VB.NET                                 Hendra, S.T.




Dasar OOP
Visual Basic merupakan bahasa yang Object-Based (komponen-komponen program dibuat
dalam bentuk objek), sedangkan VB.NET adalah Object Oriented, hal ini berarti bahwa VB.NET
merupakan bahasa yang benar-benar berorientasi object dengan mendukung empat pilar utama
dari OOP yaitu Polymorphism, Inheritance, Abstraction dan Encapsulation.

Kalau anda adalah programmer yang terbiasa dengan pendekatan procedural terstruktur, maka
anda akan baru dengan beberapa istilah OOP yang kita sebutkan diatas, dan memang hal tersebut
senantiasa menjadi masalah bagi programmer yang berasal dari VB dan ingin beralih ke
VB.NET.

Lalu timbul pertanyaan, apakah pada kita harus menguasai dan memahami semua istilah diatas
baru dapat membuat program aplikasi dengan VB.NET ? Tentu saja jawabannya tidak, tetapi
sebagai programmer VB.NET yang baik, maka konsep dari OOP tidak dapat diabaikan.


Mengapa harus pendekatan OOP?
Tujuan utama dari pengembangan pendekatan berorientasi objek (OOP) adalah untuk
menghilangkan beberapa kelemahan yang terdapat pada pendekatan procedural. Pada OOP data
diperlakukan sebagai elemen yang penting dan tidak boleh mengalir secara bebas dalam
program. Data yang terikat kepada function dan harus dilindungi terhadap kemungkinan
perubahan dari luar function.

Catatan :

Anda dapat melihat konsep OOP seperti suatu objek Televisi, dimana sebagai pemakai
kita tidak perlu terlalu pusing dengan komponen apa saja yang bekerja didalam televise
tersebut, tetapi sebagai pemakai kita cukup mengerti bagaimana menghidupkan, memilih
channel, mengubah volume suara, dan beberapa setting dasar.


OOP memungkinkan untuk pemecahan masalah kedalam sejumlah entitas yang disebut sebagai
objek dan kemudian mengembangkan data dan fungsi disekitar objek tersebut. Salah satu
manfaat yang terpenting dari OOP adalah pemanfaatan kembali.

Beberapa kemampuan utama dari OOP adalah sebagai berikut :

   •   Menekankan pada data dari pada procedure
   •   Program terbagi kedalam objek-objek
   •   Data disembunyikan dari akses oleh function-function eksternal
   •   Objek dapat berkomunikasi satu dengan yang lain melalui function
   •   Data baru dan function dapat dengan mudah ditambahkan pada saat dibutuhkan.
   •   Mengikuti pendekatan buttom up.


INDOPROG                                                                             2
Pemrograman Berorientasi Objek pada VB.NET                                    Hendra, S.T.


Konsep dari OOP:
   •    Objects
   •    Classes
   •    Data Abstraction dan Encapsulation
   •    Inheritance
   •    Polymorphism

Objek

Objek merupakan dasar dari entitas run-time dalam suatu sistem berorientasi objek. Masalah
pada pemrograman adalah menganalisa dalam arti objek dan komunikasi alamiah diantara
mereka. Ketika suatu program dijalankan, objek berinteraksi satu dengan yang lain dengan saling
mengirim message. Objek-objek yang berbeda berinteraksi satu dengan yang lain tanpa
mengetahui detail data dari masing-masing data ataupun koding.

Class

Suatu class adalah suatu koleksi dari objek-objek yang bertipe sama. Setelah suatu class telah
didefinisikan, sejumlah dari objek-objek dapat dibuat berdasarkan class tersebut.




Catatan :

Istilah Class dan Objek sering dicampuradukan, pada objek merupakan instance dari suatu class
pada saat runtime, jadi pada saat design, class merupakan cetak biru bagi objek-objek yang akan
dibuat pada saat runtime.

Anda dapat mengasosiasikan class dengan gambar denah dari rancangan rumah, dan selanjutnya
berdasarkan denah ini akan dibangun rumah-rumah (objek) sebenarnya.


Data Abstraction dan Encapsulation

Abstraction mengacu pada usaha untuk menampilkan hal-hal yang penting tanpa
mengikutsertakan detail latarbelakang ataupun penjelasan. Class-class menggunakan konsep dari
abstraksi dan mendefinsikannya sebagai suatu daftar dari atribut-atribut abstrak.




INDOPROG                                                                                3
Pemrograman Berorientasi Objek pada VB.NET                                   Hendra, S.T.


Catatan :

Sebagaimana contoh sebelumnya bahwa TV merupakan gambaran dari Abstraksi, dimana yang
perlu ditonjolkan pada pemakai adalah hal-hal penting bagaimana menghidupkan dan mematikan
serta berbagai setting dasar, sedangkan permasalahan teknis yang berada didalam kotak TV
seperti rangkaian elektronik disembunyikan dari pemakai. Jadi dalam hal ini TV dianggap suatu
black box.

Menyimpan data dan fungsi-fungsi ke dalam suatu unit tunggal (class) adalah encapsulation.
Data tidak dapat diakses oleh dunia luar dan hanya fungsi-fungsi yang mana berada dalam class
tersebut dapat mengaksesnya.

Inheritance

Inheritance adalah proses yang mana objek-objek dapat mengusahakan member dari objek class
lain. Pada OOP inheritance menyediakan pemakaian kembali, seperti, menambah kemampuan
baru pada class yang telah ada dengan tanpa melakukan modifikasi langsung terhadap class
tersebut. Hal ini dilakukan dengan menurunkan suatu class baru dari yang class telah ada. Class
baru tersebut memiliki kombinasi dari keduanya.

Catatan :

Pendekatan inheritance dapat dipahami sebagai pengembangan produk, dimana engineer tidak
perlu merancang produk dari awal, tetapi dengan melakukan modifikasi terhadap produk yang
telah ada untuk menghasilkan suatu produk baru.


Polymorphism

Polymorphism adalah kemampuan untuk memiliki lebih dari satu bentuk. Suatu operasi dapat
menunjukan prilaku yang berbeda pada instance yang berbeda. Prilaku tersebut tergantung
kepada tipe data yang digunakan dalam operasi. Polymorphism secara ekstensif digunakan dalam
implementasi Inheritance.

Dengan polymorphism kita dapat membuat beberapa fungsi dengan nama yang sama tetapi
memiliki daftar argument yang berbeda baik dari segi jumlah maupun tipe datanya
(Overloading), sehingga dalam implementasinya fungsi akan dioperasikan berdasarkan argumen
yang diberikan, sehingga program dapat bereaksi secara tepat sesuai dengan jenis tipe data dan
jumlah argument.

Kemudian polymorphism juga memiliki fungsi dimana pemanfaatan variable dengan tipe base
class untuk menampung instance dari class turunannya dan menjalankan metoda class
turunannya.

Keunggulan dari OOP


INDOPROG                                                                               4
Pemrograman Berorientasi Objek pada VB.NET                               Hendra, S.T.




OOP memiliki keunggulan berikut diatas pendekatan konvensional:

   •   OOP menyediakan struktur modular yang jelas untuk program, yang mana cocok untuk
       mendefinisikan tipe data abstrak yang merupakan detail dari implementasi
       disembunyikan serta unit memiliki interface yang telah didefinisikan dengan jelas.
   •   OOP memudahkan maintenance dan modifikasi terhadap kode yang telah sebagai objek
       baru yang dapat dibuat dengan perubahan yang minimal
   •   OOP menyediakan suatu kerangka kerja yang baik untuk kode library yang mana
       menyediakan komponen software yang secara mudah dapat disesuaikan dan dimodifikasi
       oleh programmer. Hal ini khususnya sangat berguna untuk pengembangan user interface
       secara grafik.

Catatan :

Setelah anda membaca uraian tersebut diatas, awalnya anda akan merasa kesulitan untuk
memahami dan menerapkan beberapa konsep-konsep diatas pada program anda, dan hal tersebut
adalah wajar.

Untuk mentransformasi gaya pemrograman anda dari pendekatan procedural terstruktur menjadi
OOP membutuhkan waktu dan usaha. Sebab pada pendekatan procedural terstruktur focus
programmer langsung kepada logika dan koding untuk pencapaian hasil, sedangkan pada OOP
kita harus melakukan abstraksi terhadap data dan fungsi yang berkaitan menjadi class, dan
selanjutnya class-class tersebut berinteraksi dengan message untuk mencapai tujuan akhir.

Untuk membantu pengertian dan menunjukan keunggulan konsep OOP, penulis akan
memberikan beberapa contoh keunggulan pemanfaatan OOP pada bagian-bagian selanjutnya.




INDOPROG                                                                           5
Pemrograman Berorientasi Objek pada VB.NET                                     Hendra, S.T.




OOP pada Visual Basic

Membuat Class
Pemrograman OOP pada Visual Basic dapat dilakukan dengan merancang class dari objek
dengan menggunakan struktur class sebagai berikut :

Class nama
 'member [variable, property, method and event declarations]
End Class

Contoh :
Misalnya kita ingin membuat program animasi bola pantul yang memanfaatkan GDI+ dengan
pendekatan berorientasi objek, maka sebagai langkah awal adalah merancang Class untuk bola
pantul.

Pada tahap rancangan, kita harus dapat mendefinisikan aksi apa saja yang harus dapat dilakukan
oleh objek bola pantul yaitu bergerak (move) yang tentu saja memiliki koordinat awal (x,y) yang
bergerak kearah tertentu (dx, dy). Dalam pergerakan dilayar, tentu saja dibatasi oleh area tertentu
(sx,sy).

Kemudian sebagai wujud dari animasi gerakan bola dilayar, kita perlu menyediakan aksi draw
dan clear.

Adapun rancangan class tersebut diatas dalam bentuk terprogram adalah sebagai berikut :

Class Pantul
   Protected x As Single                'posisi x dilayar
   Protected y As Single                'posisi y dilayar
   Private sx As Single                 'jumlah kolom x
   Private sy As Single                 'jumlah baris y
   Private dx As Single                 'arah bola terhadap x
   Private dy As Single                 'arah bola terhadap y

   Public Sub New(f as form)            'constructor
     sx = f.width  30                  'lebar form dibagi 30
     sy = f.height  30                 'tinggi form dibagi 30
     x = rnd*(sx-2) + 2                 'posisi awal random
     y = rnd*(sy-2) + 2
     dx = 1                             'arah diagonal ke bawah
     dy = 1
     Draw(f)
   End Sub

   Public Sub Draw(f as form)   'metoda
     'gambar bola ukuran 30x30 dengan warna merah
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
     MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)



INDOPROG                                                                                 6
Pemrograman Berorientasi Objek pada VB.NET                                   Hendra, S.T.


   End Sub

   Public Sub Clear(f as form) 'metoda
     'gambar bola ukuran 30x30 dengan warna latar belakang form
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3)
     MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30)
   End Sub

   Public Sub Move(f as form)   'metoda
     'hapus gambar bola sebelumnya
     Clear(f)
     'gerakan bola dengan mengubah x, y sesuai dengan arah
     x = x + dx
     y = y + dy
     'jika mengenai daerah bingkai
     If x < 2 or x > (sx-2) Then dx = -dx
     If y < 2 or y > (sy-2) Then dy = -dy
     'gambar bola diposisi baru
     Draw(f)
   End Sub
End Class

Catatan :
Jika anda perhatikan perhatikan rancangan class diatas, maka konsep dari data abstraction
akan nampak, dimana sebagai interface keluar hanya terdiri metoda New, Draw, Clear,
dan Move, sedangkan pengkodean tersembunyi dari program yang akan memanfaatkan
Objek dari Class Pantul

Kemudian konsep dari data encapsulation, dimana variable x,y,sx,sy,dx, dan dy disatukan
beserta fungsi New, Draw, Clear, dan Move didalam satu Class Pantul.


Ruang Lingkup member pada suatu class

Pada saat pendeklarasian member pada class anda dapat menggunakan keyword seperti Friend,
Private, Protected, Protected Friend, dan Public, dimana masing-masing memiliki kendali akses
yang berbeda.

Friend, member hanya tersedia bagi kode pada lingkup project yang sama.
Private, member hanya tersedia bagi class itu sendiri
Protected, member tersedia bagi class dan class turunannya.
Protected Friend, member tersedua bagi kode pada lingkup project yang sama, dan class
turunannya.
Public, member tersedia bagi semua kode program.

Jika anda tidak menentukan jenis kendali akses bagai suatu member, maka defaultnya adalah
Public.




INDOPROG                                                                                7
Pemrograman Berorientasi Objek pada VB.NET                                     Hendra, S.T.


Constructors
Suatu constructor adalah anggota function yang mana memiliki tugas untuk menginisialisasi
objek dari classnya. Suatu constructor akan dijalankan ketika objek dari class tersebut diciptakan.
Kita dapat mengirim data kepada konstruktor dengan mencantumkannya didalam kurung. Pada
Visual Basic suatu konstruktor harus dibuat dengan suatu Sub procedure dengan nama New pada
class. Koding berikut mendemonstrasikan pemakaian dari konstruktor di Visual Basic.

   Public Sub New(f as form)            'constructor
     sx = f.width  30                  'lebar form dibagi 30
     sy = f.height  30                 'tinggi form dibagi 30
     x = rnd*(sx-2) + 2                 'posisi awal random
     y = rnd*(sy-2) + 2
     dx = 1                             'arah diagonal ke bawah
     dy = 1
     Draw(f)
   End Sub

Pada contoh diatas, konstruktor digunakan untuk menginisialisasi nilai awal untuk variable pada
Objek seperti sx, sy, x, y, dx, dan dy.

Untuk konstruktor diatas, pada saat kita membuat instance dari Class dengan

Dim Bola As Pantul
Bola = New Pantul(Me)

Dimana Me mengacu pada form yang sedang aktif.

Destructors
Destructors akan dijalankan ketika suatu objek dimusnahkan. Didalam suatu destructor kita dapat
menempatkan koding untuk membersihkan objek setelah digunakan. Kita menggunakan metode
Finalize di Visual Basic untuk membuat destructor yang otomatis akan dijalankan ketika runtime
.NET menemukan bahwa objek tidak dibutuhkan lagi.

Contoh implementasi pemakaian destructor adalah misalnya pada konstruktor kita membuka data
maupun file, sehingga pada saat destructor kita perlu menutup data maupun file yang terbuka.

Catatan:

Setiap objek didunia nyata memiliki fase awal yaitu kelahiran, dan fase akhir yaitu
kematian. Pada saat suatu objek dilahirkan tentu saja telah memiliki nilai property
bawaan, seperti seorang bayi yang baru dilahirkan telah memiliki jenis kelamin, berat
badan, dan tinggi.

Demikian juga objek dalam konsep OOP, yang kadang-kadang membutuhkan pemberian
nilai awal kepada beberapa property begitu instance dari class dibuat. Tindakan
pemberian nilai awal (inisialisasi) ini dapat dilakukan dengan menggunakan metoda


INDOPROG                                                                                 8
Pemrograman Berorientasi Objek pada VB.NET                                  Hendra, S.T.


khusus yang dikenal sebagai Constructor.

Contoh Keunggulan OOP (Bagian 1)
Jika sekilas kita melihat uraian yang telah disebutkan diatas seakan-akan segala sesuatu yang
dilakukan dengan pendekatan OOP dapat juga dilakukan dengan teknik pemrograman biasanya.
Tetapi misalnya anda bayangkan kita ingin membuat program bola pantul yang terdiri dari 15
buah bola pantul dilayar yang masing-masing bergerak tanpa pendekatan OOP.

Berikut ini saya akan membuat contoh dengan pendekatan OOP, dan anda bandingkan sendiri.

Pertama kita akan membuat variable array untuk bola pantul sebagai array 15 elemen :

Dim Bola(14) As Pantul

Kemudian kita buat instance dari Class Pantul

For I As Integer = 0 To 14
    Bola(I) = New Pantul(Me)
Next I

Selanjutnya kita gerakan masing-masing objek dengan looping :

For I As Integer = 0 To 14
    Bola.Move(Me)
Next I

Dari hal ini jelaslah bahwa dengan pendekatan OOP kita tidak melakukan perubahan terhadap
rancangan Class Pantul sama sekali, melainkan kita membuat 15 instance dari Class Pantul.

Listing lengkap dari program 15 ola pantul dengan pendekatan OOP.

Option Explicit On
Imports Sistem
Imports Sistem.Windows.Forms
Imports Microsoft.VisualBasic

Public Class MyForm : Inherits Form

   Dim WithEvents MyTimer as New Timer
   Dim Bola(14) As Pantul

   <Sistem.STAThread()> _
   Public Shared Sub Main()
       Application.Run(New MyForm)
   End Sub

   Public Sub New()                                  'Constructor

        Me.BackColor = Sistem.Drawing.Color.Black
        Me.FormBorderStyle = FormBorderStyle.None



INDOPROG                                                                               9
Pemrograman Berorientasi Objek pada VB.NET                    Hendra, S.T.


       Me.Width = Screen.PrimaryScreen.Bounds.Width
       Me.Height = Screen.PrimaryScreen.Bounds.Height
       For I As Integer = 0 to 14
           Bola(I) = New Pantul(Me)
       Next I
       MyTimer.Interval = 150               '150 millidetik
       MyTimer.Enabled = True
   End Sub

   'Mengerakan objek dengan event tick pada objek MyTimer
   Private Sub MyTimer_Tick(sender as object, e as eventargs) _
           handles MyTimer.Tick
       For I As Integer = 0 to 14
           Bola(I).Move(Me)
       Next I
   End Sub

End Class

Class Pantul
   Protected x As Single          'posisi x dilayar
   Protected y As Single          'posisi y dilayar
   Private sx As Single           'jumlah kolom x
   Private sy As Single           'jumlah baris y
   Private dx As Single           'arah bola terhadap x
   Private dy As Single           'arah bola terhadap y

   Public Sub New(f as form)      'constructor
     sx = f.width  30            'lebar form dibagi 30
     sy = f.height  30           'tinggi form dibagi 30
     x = rnd*(sx-2) + 2           'posisi awal random
     y = rnd*(sy-2) + 2
     dx = 1                       'arah diagonal ke bawah
     dy = 1
     Draw(f)
   End Sub

   Overridable Public Sub Draw(f as form)   'metoda
     'gambar bola ukuran 30x30 dengan warna merah
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
     MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)
   End Sub

   Overridable Public Sub Clear(f as form) 'metoda
     'gambar bola ukuran 30x30 dengan warna latar belakang form
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3)
     MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30)
   End Sub

   Public Sub Move(f as form)   'metoda
     'hapus gambar bola sebelumnya
     Clear(f)
     'gerakan bola dengan mengubah x, y sesuai dengan arah
     x = x + dx
     y = y + dy


INDOPROG                                                               10
Pemrograman Berorientasi Objek pada VB.NET   Hendra, S.T.


     'jika mengenai daerah bingkai
     If x < 2 or x > (sx-2) Then dx = -dx
     If y < 2 or y > (sy-2) Then dy = -dy
     'gambar bola diposisi baru
     Draw(f)
   End Sub

End Class




INDOPROG                                             11
Pemrograman Berorientasi Objek pada VB.NET                                    Hendra, S.T.



Inheritance
Pemanfaatan Kembali
Kunci dari kemampuan OOP adalah pemakaian kembali. Yang secara nyata akan menghemat
waktu jika kita dapat memanfaatkan kembali pada yang pernah kita buat. Pemakaian kembali
akan menurunkan pekerjaan untuk testing dan debugging terhadap bagian yang digunakan
kembali, karena telah dilakukan sebelumnya. Proses inheritance dilakukan dengan menurunkan
suatu class baru dari class yang telah ada. Class yang lama disebut sebagai base class dan class
yang baru disebut derived class. Class turunan akan mewarikan semua atau sebagian dari segala
sesuatu yang terdapat pada base class. Pada Visual Basic kita menggunakan keyword Inherits
untuk menurunkan suatu class:

Misalnya kita telah memiliki Class Pantul

Class Pantul
   member
End Class

Selanjutnya misalnya kita ingin mengembangkan Class baru dengan menurunkannya dari Class
Pantu

Class Pantul1 : Inherits Pantul
   member
End Class

Maka Class Pantul1 akan mewarisi semua member Pantul yang dideklarasikan sebagai Protected
maupun Public.

Overriding
Pada derived class kadang-kadang kita perlu mendefinisikan ulang fungsi maupun sub yang ada
pada base class, dalam hal inilah istilash Overriding muncul, dimana kita dapat mendefinisikan
ulang fungsi maupun sub pada derived class.

Misalnya pada Class Pantul1 gambar yang ingin kita hasilkan adalah persegi, maka kita perlu
melakukan Overiding terhadap Sub Draw dan Clear yang ada pada base class.

Catatan : Sub maupun Function pada base class harus dideklarasikan sebagai Overridable baru
dapat di Overrides pada derived class.

Pada Class pantul kita perlu mencantumkan keyword Overridable

   Overridable Public Sub Draw(f as form)   'metoda
     'gambar bola ukuran 30x30 dengan warna merah
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
     MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)


INDOPROG                                                                              12
Pemrograman Berorientasi Objek pada VB.NET                                Hendra, S.T.


   End Sub

   Overridable Public Sub Clear(f as form) 'metoda
     'gambar bola ukuran 30x30 dengan warna latar belakang form
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3)
     MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30)
   End Sub

Selanjutnya pada class turunannya kita dapat melakukan Overriding terhadap metoda yang
dimaksud :

Class Pantul1 : Inherits Pantul

   Public Sub New(f as form)         'constructor
      MyBase.New(f)
   End Sub

   Overrides Public Sub Draw(f as form)   'metoda
     'gambar persegi ukuran 30x30 dengan warna merah
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
     MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30)
   End Sub

   Overrides Public Sub Clear(f as form) 'metoda
     'gambar persegi ukuran 30x30 dengan warna latar belakang form
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3)
     MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30)
   End Sub

End Class

Shadowing
Jika pada Overriding kita membutuhkan permisi dari base class untuk melakukan overriding
dengan keyword Overridable, selain itu kita juga dapat melakukan Shadowing terhadap metoda
pada base class yang tidak memberikan permisi Overridable.

Contoh :

Pada base class :

   Public Sub Draw(f as form)   'metoda
     'gambar bola ukuran 30x30 dengan warna merah
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
     MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)
   End Sub

Pada class turunannya :


INDOPROG                                                                          13
Pemrograman Berorientasi Objek pada VB.NET                                 Hendra, S.T.


   Public Shadows Sub Draw(f as form)   'metoda
     'gambar persegi ukuran 30x30 dengan warna merah
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
     MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30)
   End Sub

Catatan :

Pemakaian cara Shadowing menyebabkan konsep polymorphism tidak dapat berfungsi
sebagaimana pada cara Overriding.

OOP pada Pemrograman Form
Untuk pemrograman program Windows yang berbasis form, .NET telah menyediakan class
Form yang terdefinisi pada namespace Sistem.Windows.Forms, kemudian didalam
pemakaiannya kita dapat melakukan inheritance dari class form ke program kita dengan menbuat
class baru :

Public Class MyForm : Inherits Form

Selanjutnya kita dapat membuat konstruktor (sub New) untuk menginisialisasi keadaan awal dari
form kita (misalnya mengatur warna, ukuran, menambah control timer dll)

   Public Sub New()                                  'Constructor

       Me.BackColor = Sistem.Drawing.Color.Black
       Me.FormBorderStyle = FormBorderStyle.None
       Me.Width = Screen.PrimaryScreen.Bounds.Width
       Me.Height = Screen.PrimaryScreen.Bounds.Height
       For I As Integer = 0 to 14
           Bola(I) = New Pantul(Me)
       Next I
       MyTimer.Interval = 150               '150 millidetik
       MyTimer.Enabled = True
   End Sub

Pada class MyForm kita dapat juga melakukan overriding terhadap metoda yang telah terdefinisi
pada class Form, misalnya untuk metoda paint.

   Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
       Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
       MyBase.OnPaint(e)
       e.Graphics.DrawLine(MyPen,10,10,200,100)
   End Sub

Contoh Keunggulan OOP (Bagian 2)
Misalnya kita akan membuat program yang terdiri dari 2 objek pantul yang satu berbentuk bola
dan satu berbentuk persegi.



INDOPROG                                                                           14
Pemrograman Berorientasi Objek pada VB.NET                                 Hendra, S.T.


Pada pendekatan OOP, misalnya kita telah memiliki class Pantul yang menampilkan bentuk
lingkaran, selanjutnya adalah membuat class Pantul1 yang akan menampilkan bentuk persegi,
tetapi kita tidak perlu merancang class Pantul1 dari awal melainkan cukup menurunkannya dari
class Pantul dengan melakukan override terhadap metoda draw dan clear.

Jadi dalam hal ini kita tidak perlu merancang class dari awal, tetapi cukup memperbaharui
maupun mengembangkan class yang telah ada, sehingga waktu pemrograman dapat dipersingkat
dan proses debug dapat dikurangi.

Listing program menampilkan bola dan persegi pantul dilayar :

Option Explicit On
Imports Sistem
Imports Sistem.Windows.Forms
Imports Microsoft.VisualBasic

Public Class MyForm : Inherits Form

   Dim WithEvents MyTimer as New Timer
   Dim Bola As Pantul
   Dim Persegi As Pantul1

   <Sistem.STAThread()> _
   Public Shared Sub Main()
       Application.Run(New MyForm)
   End Sub


   Public Sub New()                                  'Constructor

       Me.BackColor = Sistem.Drawing.Color.Black
       Me.FormBorderStyle = FormBorderStyle.None
       Me.Width = Screen.PrimaryScreen.Bounds.Width
       Me.Height = Screen.PrimaryScreen.Bounds.Height
       Bola = New Pantul(Me)
       Persegi = New Pantul1(Me)
       MyTimer.Interval = 150
       MyTimer.Enabled = True
   End Sub

   Private Sub MyTimer_Tock(sender as object, e as eventargs) _
           handles MyTimer.Tick
       Bola.Move(Me)
       Persegi.Move(Me)
   End Sub

End Class


Class Pantul
   Protected x As Single              'posisi   x dilayar
   Protected y As Single              'posisi   y dilayar
   Private sx As Single               'jumlah   kolom x
   Private sy As Single               'jumlah   baris y



INDOPROG                                                                           15
Pemrograman Berorientasi Objek pada VB.NET                      Hendra, S.T.


   Private dx As Single           'arah bola terhadap x
   Private dy As Single           'arah bola terhadap y

   Public Sub New(f as form)      'constructor
     sx = f.width  30            'lebar form dibagi 30
     sy = f.height  30           'tinggi form dibagi 30
     x = rnd*(sx-2) + 2           'posisi awal random
     y = rnd*(sy-2) + 2
     dx = 1                       'arah diagonal ke bawah
     dy = 1
     Draw(f)
   End Sub

   Overridable Public Sub Draw(f as form)   'metoda
     'gambar bola ukuran 30x30 dengan warna merah
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
     MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)
   End Sub

   Overridable Public Sub Clear(f as form) 'metoda
     'gambar bola ukuran 30x30 dengan warna latar belakang form
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3)
     MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30)
   End Sub

   Public Sub Move(f as form)   'metoda
     'hapus gambar bola sebelumnya
     Clear(f)
     'gerakan bola dengan mengubah x, y sesuai dengan arah
     x = x + dx
     y = y + dy
     'jika mengenai daerah bingkai
     If x < 2 or x > (sx-2) Then dx = -dx
     If y < 2 or y > (sy-2) Then dy = -dy
     'gambar bola diposisi baru
     Draw(f)
   End Sub
End Class

Class Pantul1 : Inherits Pantul

   Public Sub New(f as form)      'constructor
      MyBase.New(f)               'menjalankan constructor base class
   End Sub

   Overrides Public Sub Draw(f as form)   'metoda
     'gambar bola ukuran 30x30 dengan warna merah
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
     MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30)
   End Sub

   Overrides Public Sub Clear(f as form) 'metoda
     'gambar bola ukuran 30x30 dengan warna latar belakang form
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics


INDOPROG                                                                16
Pemrograman Berorientasi Objek pada VB.NET                Hendra, S.T.


     Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3)
     MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30)
   End Sub

End Class




INDOPROG                                                          17
Pemrograman Berorientasi Objek pada VB.NET                               Hendra, S.T.



Polymorphism
Polymorphism merupakan salah satu fasilitas yang krusial pada OOP, yang memiliki arti "satu
nama, banyak bentuk". Hal ini disebut juga sebagai Overloading yang berarti menggunakan hal
yang sama untuk tujuan yang berbeda. Dengan menggunakan Polymorphism kita dapat membuat
banyak fungsi dengan nama yang sama tetapi memiliki daftar argument yang berbeda. Fungsi
tersebut dijalankan berdasarkan daftar argument yang digunakan untuk menjalankan fungsi.

Misalnya kita memperbaharui class Pantul dimana pada konstruktor kita dapat menentukan
warna dari lingkaran.

Class Pantul
   Protected x As Single        'posisi x dilayar
   Protected y As Single        'posisi y dilayar
   Private sx As Single         'jumlah kolom x
   Private sy As Single         'jumlah baris y
   Private dx As Single         'arah bola terhadap x
   Private dy As Single         'arah bola terhadap y
   Private clr As Sistem.Drawing.Color

   Public Sub New(f as form)    'constructor
     me.New(f,Sistem.Drawing.Color.Red)
   End Sub

   Public Sub New(f as form, w as sistem.drawing.color)
                                'constructor
     sx = f.width  30          'lebar form dibagi 30
     sy = f.height  30         'tinggi form dibagi 30
     x = rnd*(sx-2) + 2         'posisi awal random
     y = rnd*(sy-2) + 2
     dx = 1                     'arah diagonal ke bawah
     dy = 1
     clr = w
     Draw(f)
   End Sub

   Overridable Public Sub Draw(f as form)   'metoda
     'gambar bola ukuran 30x30 dengan warna merah
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(Clr,3)
     MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)
   End Sub

   Overridable Public Sub Clear(f as form) 'metoda
     'gambar bola ukuran 30x30 dengan warna latar belakang form
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3)
     MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30)
   End Sub

   Public Sub Move(f as form)   'metoda
     'hapus gambar bola sebelumnya
     Clear(f)
     'gerakan bola dengan mengubah x, y sesuai dengan arah


INDOPROG                                                                         18
Pemrograman Berorientasi Objek pada VB.NET                                   Hendra, S.T.


     x = x + dx
     y = y + dy
     'jika mengenai daerah bingkai
     If x < 2 or x > (sx-2) Then dx = -dx
     If y < 2 or y > (sy-2) Then dy = -dy
     'gambar bola diposisi baru
     Draw(f)
   End Sub
End Class

Dalam hal ini class pantul memiliki dua konstruktor yang masing-masing memiliki daftar
argument yang berbeda yaitu :

   Public Sub New(f as form)           'constructor

Dan

   Public Sub New(f as form, w as sistem.drawing.color)

Sehingga ketika kita membuat instance dari Class Pantul dapat dilakukan dengan :

   Bola = New Pantul(Me)

Ataupun :
   Bola = New Pantul(Me, Sistem.Drawing.Color.Blue)

Polymorphism juga dapat berupa pemanfaatan variable yang bertype base class untuk
mengimplementasikan metoda pada class-class turunannya.

Misalnya kita mendeklarasikan variable array bola yang terdiri dari dua elemen

Dim Bola(1) As Pantul

Bola(0) = New Pantul(Me)
Bola(1) = New Pantul1(Me)

Dimana variable Bola(n) sebenarnya merupakan variable type Pantul, tetapi dalam
pemakaiannya kita gunakan untuk instance Pantul1, selanjutnya :

Bola(0).Move(Me)
Bola(1).Move(Me)

Akan menjalankan metoda Move dari Class yang bersesuaian dengan instance objek yang dibuat.

Contoh Keunggulan OOP (Bagian 3)
Misalnya kita ingin membuat program animasi bola pantul di layar yang memberi kebebasan
kepada pemakai untuk menentukan jumlah objek masing-masing bentuk dilayar :


INDOPROG                                                                             19
Pemrograman Berorientasi Objek pada VB.NET                                  Hendra, S.T.




Dim JlhBola As Integer = Val(Inputbox("Jumlah Bola"))

Dim JlhPersegi As Integer = Val(Inputbox("Jumlah Persegi"))

Selanjutnya kita membuat instance dari masing-masing class sesuai dengan jumlah yang
ditentukan :

   Dim Bola(14) As Pantul

   Dim Jlh As Integer

        Dim I As Integer = 0
        Do While I < JlhBola
           Bola(I) = new Pantul(Me)
           I+=1
        Loop

        Do While I < JlhBola+JlhPersegi
           Bola(I) = new Pantul1(Me)
           I+=1
        Loop

   Jlh = JlhBola+JlhPersegi

Dalam hal ini kita mendeklarasikan variable array Bola yang bertipe Pantul, padahal dalam
pemakaiannya kita gunakan juga untuk menampung instance untuk class Pantul1.

Kemudian untuk mengerakan objek kita gunakan looping :

        For I As Integer = 0 To Jlh-1
            Bola(I).Move(Me)



INDOPROG                                                                            20
Pemrograman Berorientasi Objek pada VB.NET                                  Hendra, S.T.


        Next I

Selanjutnya metoda move yang dijalankan sangat tergantung pada jenis instance dari variable
objek.

Dapatkah anda bayangkan bagaimana kalau tanpa menggunakan Polymorphism ?

Listing program menampilkan bola dan persegi pantul dilayar sesuai dengan jumlah yang
diinginkan pemakai :

Option Explicit On
Imports Sistem
Imports Sistem.Windows.Forms
Imports Microsoft.VisualBasic

Public Class MyForm : Inherits Form

   Dim WithEvents MyTimer as New Timer
   Dim Bola(14) As Pantul
   Dim Jlh As Integer

   <Sistem.STAThread()> _
   Public Shared Sub Main()
       Application.Run(New MyForm)
   End Sub

   Public Sub New()                                  'Constructor

        Me.BackColor = Sistem.Drawing.Color.Black
        Me.FormBorderStyle = FormBorderStyle.None
        Me.Width = Screen.PrimaryScreen.Bounds.Width
        Me.Height = Screen.PrimaryScreen.Bounds.Height
        Dim JlhBola As Integer = Val(Inputbox("Jumlah Bola"))
        Dim JlhPersegi As Integer = Val(Inputbox("Jumlah Persegi"))

        Dim I As Integer = 0
        Do While I < JlhBola
           Bola(I) = new Pantul(Me)
           I+=1
        Loop

        Do While I < JlhBola+JlhPersegi
           Bola(I) = new Pantul1(Me)
           I+=1
        Loop

        Jlh = JlhBola+JlhPersegi

       MyTimer.Interval = 150
       MyTimer.Enabled = True
   End Sub

   Private Sub MyTimer_Tock(sender as object, e as eventargs) _
           handles MyTimer.Tick
       For I As Integer = 0 To Jlh-1


INDOPROG                                                                            21
Pemrograman Berorientasi Objek pada VB.NET                    Hendra, S.T.


           Bola(I).Move(Me)
       Next I
   End Sub

End Class


Class Pantul
   Protected x As Single        'posisi x dilayar
   Protected y As Single        'posisi y dilayar
   Private sx As Single         'jumlah kolom x
   Private sy As Single         'jumlah baris y
   Private dx As Single         'arah bola terhadap x
   Private dy As Single         'arah bola terhadap y
   Private clr As Sistem.Drawing.Color

   Public Sub New(f as form)    'constructor
     me.New(f,Sistem.Drawing.Color.Red)
   End Sub

   Public Sub New(f as form, w as sistem.drawing.color)
                                'constructor
     sx = f.width  30          'lebar form dibagi 30
     sy = f.height  30         'tinggi form dibagi 30
     x = rnd*(sx-2) + 2         'posisi awal random
     y = rnd*(sy-2) + 2
     dx = 1                     'arah diagonal ke bawah
     dy = 1
     clr = w
     Draw(f)
   End Sub

   Overridable Public Sub Draw(f as form)   'metoda
     'gambar bola ukuran 30x30 dengan warna merah
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(Clr,3)
     MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)
   End Sub

   Overridable Public Sub Clear(f as form) 'metoda
     'gambar bola ukuran 30x30 dengan warna latar belakang form
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3)
     MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30)
   End Sub

   Public Sub Move(f as form)   'metoda
     'hapus gambar bola sebelumnya
     Clear(f)
     'gerakan bola dengan mengubah x, y sesuai dengan arah
     x = x + dx
     y = y + dy
     'jika mengenai daerah bingkai
     If x < 2 or x > (sx-2) Then dx = -dx
     If y < 2 or y > (sy-2) Then dy = -dy
     'gambar bola diposisi baru
     Draw(f)


INDOPROG                                                              22
Pemrograman Berorientasi Objek pada VB.NET                    Hendra, S.T.


   End Sub
End Class

Class Pantul1 : Inherits Pantul

   Public Sub New(f as form)       'constructor
      MyBase.New(f)
   End Sub

   Overrides Public Sub Draw(f as form)   'metoda
     'gambar bola ukuran 30x30 dengan warna merah
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3)
     MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30)
   End Sub

   Overrides Public Sub Clear(f as form) 'metoda
     'gambar bola ukuran 30x30 dengan warna latar belakang form
     Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics
     Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3)
     MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30)
   End Sub


End Class

Catatan :

Konsep Polymorphism tidak berlaku untuk metoda Shadowing.




INDOPROG                                                               23
Pemrograman Berorientasi Objek pada VB.NET                                Hendra, S.T.




Interfaces
Interfaces memungkinkan kita untuk membuat definisi untuk interaksi komponen. Interface juga
menyediakan cara lain untuk mengimplementasikan polymorphism. Melalui interface, kita dapat
menentukan metoda yang mana suatu komponen harus miliki tanpa menentukan bagaimana
metoda tersebut diimplementasikan (koding detail untuk metoda tersebut). Jadi dalam hal ini
interface menyerupai prototype bagi class lain yang akan dikembangkan.

Anda bisa membayangkan interface sebagai suatu standard pengembangan berbagai fasilitas
dalam objek yang dibakukan, jika class mendukung standard interface tersebut, maka wajib
memenuhi tata cara penulisan yang telah didefinisikan dalam interface.

Misalnya kita membuka pusat layanan pelanggan dimana semua pelayan diwajibkan melakukan
sapaan pembukan kepada para tamu yang dating berkunjung, dan kata pembuka sapaan telah
distandarisasi untuk pagi, sore, dan malam.
   Public   Interface Sapaan
      Sub   Pagi()
      Sub   Sore()
      Sub   Malam()

   End Interface

Kita menggunakan keyword Interface untuk membuat suatu interface dan keyword implements
untuk mengimplementasikan interface tersebut.

Selanjutnya sapaan akan disampaikan dalam dua bahasa sesuai dengan asal pengunjung,
sehingga kita dapat memgembangkan class dengan mengimplementasikan interface sapaan yang
telah dibuat :
  Public Class Indonesia : Implements Sapaan
      Sub Pagi() Implements Sapaan.Pagi
          Console.WriteLine("Selamat Pagi")
      End Sub

       Sub Sore() Implements Sapaan.Sore
           Console.WriteLine("Selamat Sore")
       End Sub

      Sub Malam() Implements Sapaan.Malam
          Console.WriteLine("Selamat Malam")
      End Sub
   End Class

   Public Class English : Implements Sapaan
      Sub Pagi() Implements Sapaan.Pagi
          Console.WriteLine("Good Morning")
      End Sub

       Sub Sore() Implements Sapaan.Sore



INDOPROG                                                                          24
Pemrograman Berorientasi Objek pada VB.NET               Hendra, S.T.


           Console.WriteLine("Good Afternoon")
       End Sub

       Sub Malam() Implements Sapaan.Malam
           Console.WriteLine("Good Evening")
       End Sub

   End Class

Dan listing konkret untuk contoh pemakaian interface :

Option Explicit On

Imports Sistem

Public Module MyModule

   Sub Main()
       Dim Domestik As New Indonesia
       Dim Internasional As New English
       Domestik.Pagi()
       Internasional.Pagi()
   End Sub

   Public Interface Sapaan
      Sub Pagi()
      Sub Sore()
      Sub Malam()
   End Interface

   Public Class Indonesia : Implements Sapaan
      Sub Pagi() Implements Sapaan.Pagi
          Console.WriteLine("Selamat Pagi")
      End Sub

       Sub Sore() Implements Sapaan.Sore
           Console.WriteLine("Selamat Sore")
       End Sub

      Sub Malam() Implements Sapaan.Malam
          Console.WriteLine("Selamat Malam")
      End Sub
   End Class

   Public Class English : Implements Sapaan
      Sub Pagi() Implements Sapaan.Pagi
          Console.WriteLine("Good Morning")
      End Sub

       Sub Sore() Implements Sapaan.Sore
           Console.WriteLine("Good Afternoon")
       End Sub

       Sub Malam() Implements Sapaan.Malam
           Console.WriteLine("Good Evening")
       End Sub


INDOPROG                                                         25
Pemrograman Berorientasi Objek pada VB.NET                Hendra, S.T.


   End Class

End Module


Dan kalau dijalankan akan menghasilkan tampilan berikut




INDOPROG                                                          26
Pemrograman Berorientasi Objek pada VB.NET                                 Hendra, S.T.



Abstract Classes
Suatu class abstrak tidak dapat digunakan untuk membuat objek. Suatu class abstrak dirancang
untuk berlaku sebagai suatu base class (untuk diwariskan ke class lain). Suatu abstrak class
digunakan sebagai konsep design yang menjadi acuan pengembangan bagi class-class yang akan
dikembangkan. Class abstrak menyerupai interface. Setelah suatu class abstrak dideklarasikan,
dia tidak dapat di buat objek instancenya, melainkan harus diturunkan.

Membuat class Abstrak
Pada Visual Basic .NET kita dapat membuat abstrak class dengan menggunakan keyword
MustInherit.

   MustInherit Public Class Sapaan
      MustOverride Sub Pagi()
      MustOverride Sub Sore()
      MustOverride Sub Malam()

   End Class

Kemudian pada contoh diatas pada masing-masing metoda sapaan kita menambahkan keyword
MustOverride bahwa metoda Pagi, Sore, dan Malam harus di override pada class turunannya.

Option Explicit On

Imports Sistem

Public Module MyModule

   Sub Main()
       Dim Domestik As New Indonesia
       Dim Internasional As New English
       Domestik.Pagi()
       Internasional.Pagi()
   End Sub

   MustInherit Public Class Sapaan
      MustOverride Sub Pagi()
      MustOverride Sub Sore()
      MustOverride Sub Malam()
   End Class

   Public Class Indonesia : Inherits Sapaan
      Overrides Sub Pagi()
          Console.WriteLine("Selamat Pagi")
      End Sub

       Overrides Sub Sore()
           Console.WriteLine("Selamat Sore")
       End Sub

       Overrides Sub Malam()



INDOPROG                                                                           27
Pemrograman Berorientasi Objek pada VB.NET      Hendra, S.T.


          Console.WriteLine("Selamat Malam")
      End Sub
   End Class

   Public Class English : Inherits Sapaan
      Overrides Sub Pagi()
          Console.WriteLine("Good Morning")
      End Sub

      Overrides Sub Sore()
          Console.WriteLine("Good Afternoon")
      End Sub

      Overrides Sub Malam()
          Console.WriteLine("Good Evening")
      End Sub
   End Class

End Module




INDOPROG                                                28
Pemrograman Berorientasi Objek pada VB.NET                             Hendra, S.T.




Program Tetris
Oleh : Hendra Soewarno

Contoh aplikasi pemrograman GDI+ untuk pembuatan games tetris dengan pendekatan
berorientasi objek.




Untuk memahami program ini anda perlu mengerti pemrograman form, event handling, dan
array, serta GDI+




INDOPROG                                                                       29
Pemrograman Berorientasi Objek pada VB.NET                                  Hendra, S.T.


Rancangan program
Program ini menggunakan pendekatan berorientasi objek dengan membuat dua class untuk objek
Shape dan objek Grid


Class TShape
Class ini berfungsi menghasilkan bentuk-bentuk dengan sistem koordinat berikut :




{1,0},{1,1},{1,2},{1,3}

Dan rotasi ke kanan akan menjadi




{0,1},{1,1},{2,1},{3,1}

Berikut ini adalah rincian array untuk masing-masing Shape dan rotasinya

          {1,0},{1,1},{1,2},{1,3}
          {0,1},{1,1},{2,1},{3,1}
          {1,0},{1,1},{1,2},{1,3}
          {0,1},{1,1},{2,1},{3,1}

          {0,0},{0,1},{1,0},{1,1}
          {0,0},{0,1},{1,0},{1,1}
          {0,0},{0,1},{1,0},{1,1}
          {0,0},{0,1},{1,0},{1,1}

          {0,0},{0,1},{0,2},{1,2}
          {0,0},{0,1},{1,0},{2,0}
          {0,0},{1,0},{1,1},{1,2}
          {0,1},{1,1},{2,0},{2,1}
          {0,0},{0,1},{0,2},{1,1}
          {0,0},{1,0},{1,1},{2,0}
          {1,0},{0,1},{1,1},{1,2}
          {0,1},{1,0},{1,1},{2,1}
          {0,0},{0,1},{1,1},{1,2}
          {0,1},{1,0},{1,1},{2,0}
          {0,0},{0,1},{1,1},{1,2}
          {0,1},{1,0},{1,1},{2,0}




INDOPROG                                                                            30
Pemrograman Berorientasi Objek pada VB.NET                                  Hendra, S.T.


           {0,1},{0,2},{1,0},{1,1}
           {0,0},{1,0},{1,1},{2,1}
           {0,1},{0,2},{1,0},{1,1}
           {0,0},{1,0},{1,1},{2,1}


Contoh :




Yang memiliki rincian array sebagai berikut :

{0,0},{0,1},{0,2},{1,1}
{0,0},{1,0},{1,1},{2,0}
{1,0},{0,1},{1,1},{1,2}
{0,1},{1,0},{1,1},{2,1}

Yang selanjutnya dipetakan menjadi suatu array 4 dimensi yang berisi koordinat dari masing-
masing shape :

    'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk
    'serta bentuk rotasinya
    private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _
                                    {{0,1},{1,1},{2,1},{3,1}}, _
                                    {{1,0},{1,1},{1,2},{1,3}}, _
                                    {{0,1},{1,1},{2,1},{3,1}}}, _
                                   {{{0,0},{0,1},{1,0},{1,1}}, _
                                    {{0,0},{0,1},{1,0},{1,1}}, _
                                    {{0,0},{0,1},{1,0},{1,1}}, _
                                    {{0,0},{0,1},{1,0},{1,1}}}, _
                                   {{{0,0},{0,1},{0,2},{1,2}}, _
                                    {{0,0},{0,1},{1,0},{2,0}}, _
                                    {{0,0},{1,0},{1,1},{1,2}}, _
                                    {{0,1},{1,1},{2,0},{2,1}}}, _
                                   {{{0,0},{0,1},{0,2},{1,1}}, _
                                    {{0,0},{1,0},{1,1},{2,0}}, _
                                    {{1,0},{0,1},{1,1},{1,2}}, _
                                    {{0,1},{1,0},{1,1},{2,1}}}, _
                                   {{{0,0},{0,1},{1,1},{1,2}}, _
                                    {{0,1},{1,0},{1,1},{2,0}}, _
                                    {{0,0},{0,1},{1,1},{1,2}}, _
                                    {{0,1},{1,0},{1,1},{2,0}}}, _
                                   {{{0,1},{0,2},{1,0},{1,1}}, _
                                    {{0,0},{1,0},{1,1},{2,1}}, _
                                    {{0,1},{0,2},{1,0},{1,1}}, _
                                    {{0,0},{1,0},{1,1},{2,1}}}}


Variabel pada Class TShape
    private currentshape as integer                    'menyimpan nomor current shape
    private nextshape as integer                       'menyimpan nomor next shape


INDOPROG                                                                            31
Pemrograman Berorientasi Objek pada VB.NET                               Hendra, S.T.


    public currentcolor as color                     'menyimpan warna current shape
    public nextcolor as color                        'menyimpan warna next shape
    private currentstate as integer                  'nomor rotasi shape



Konstruktor TShape

Konstuktor TShape merupakan metoda yang otomatis dijalankan begitu instance dari TShape
terbentuk.

Misalnya :

    private gtshape as new tshape                    'instance class tshape

berfungsi menghasilkan bentuk Shape berikutnya yang akan dimunculkan setelah bentuk
sekarang dengan memanggil metoda generateshape.

   'konstrutor untuk class tshape
   public sub new()
      generateshape(nextshape, nextcolor)
   end sub

Metoda GenerateNextShape

Metoda ini berfungsi memindahkan nextshape menjadi currentshape, serta membuat nextshape
yang berikutnya.
   'Membuat next shape berikutnya, dan menset current shape
   public sub generatenextshape()
      currentshape = nextshape
      currentcolor = nextcolor
      currentstate = 0                         'rotasi ke 0
      generateshape(nextshape, nextcolor)      'buat nextshape baru
    end sub

Sub GenerateShape

Berfungsi menghasilkan shape secara random, dan warnanya

   'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor
   private sub generateshape(byref shape as integer, _
                             byref shapecolor as color)
      dim c as integer
      shape = int(rnd*6)                            'random untuk shape
      c = int(rnd*8)                                'random untuk shape color
      select case c
         case 0 : shapecolor = color.red
         case 1 : shapecolor = color.green
         case 2 : shapecolor = color.blue
         case 3 : shapecolor = color.orange
         case 4 : shapecolor = color.pink
         case 5 : shapecolor = color.cyan



INDOPROG                                                                         32
Pemrograman Berorientasi Objek pada VB.NET                                       Hendra, S.T.


          case 6 : shapecolor = color.gray
          case else
                    shapecolor = color.magenta
       end select
     end sub

Catatan :
Parameter pada sub ini dilewatkan secara by refrence, sehingga nilai dapat dikembalikan ke
variable shape dan shapecolor.

Metoda Rotate

Metode ini berfungsi menset nilai currentstate ke nilai rotasi berikutnya (0 ke 1, 1 ke 2, 2 ke 3, 3
ke 0).




     'Rotasi ke bentuk berikutnya
     public sub rotate()
       currentstate = currentstate + 1                             'Rotasi berikutnya
       if currentstate = 4 then currentstate = 0                   'Kembali ke bentuk awal
     end sub
Metoda DeRotate

Metode ini berfungsi menset nilai currentstate ke nilai rotasi sebelumnya (1 ke 0, 2 ke 1, 3 ke 2,
0 ke 3).

     'Rotasi ke bentuk sebelumnya
     public sub derotate()
       currentstate = currentstate - 1                             'Rotasi sebelumnya
       if currentstate = -1 then currentstate = 3
     end sub

Metoda CurrentShapeSel

Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada
array 4 dimensi sarr.

     'Mengembalikan sel i,j dari current shape
     public function currentshapesel(i as integer, j as integer)
       return sarr(currentshape,currentstate,i,j)
     end function

Nilai sel yang dikembalikan sangat tergantung pada nilai variable currentshape (bentuk shape),
dan currentstate (nomor rotasi)



INDOPROG                                                                                 33
Pemrograman Berorientasi Objek pada VB.NET                                    Hendra, S.T.




Misalnya nilai currentshape = 4, dan nilai currentstate = 3




{1,0},{0,1},{1,1},{1,2}

Dan CurrentShapeSel(0,0) akan menghasilkan 1
CurrentShapeSel(0,1) akan menghasilkan 0

Property NextShapeSel

Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada
array 4 dimensi sarr.

     'Mengembalikan sel i,j dari next shape
     public function nextshapesel(i as integer, j as integer)
       return sarr(nextshape,0,i,j)                  'Bentuk awal
     end function

Nilai sel yang dikembalikan sangat tergantung pada nilai variable nextshape (bentuk shape), dan
currentstate defaultnya 0, karena nextshape belum mengalami rotasi.


Class TGrid
Class ini berfungsi menyediakan mekanisme Grid pada permainan Tetris, dimana pada memori
computer diwakili dengan array dua dimensi, dengan gambaran sebagai berikut :




INDOPROG                                                                              34
Pemrograman Berorientasi Objek pada VB.NET                                    Hendra, S.T.




Variabel yang digunakan
     public parr(15,25) as integer              'Array menyimpan isi sel pada grid
     public carr(15,25) as color                'Array menyimpan warna sel pada grid

Merupakan array yang mewakili grid dilayar, jika suatu sel terisi gambar, maka nilai parr(x,y)
akan berisi nilai 1, dan carr(x,y) akan berisi nilai warna gambar.

Kontruktor TGrid

Begitu instance dari TGrid terbuat, maka akan mengisi awal array parr menjadi sebagai berikut,
yang akan menjadi bingkai dari grid, sehingga area permainan mulai dari (3,0) s/d (12,22)




INDOPROG                                                                              35
Pemrograman Berorientasi Objek pada VB.NET                                    Hendra, S.T.




     'konstruktur class tgrid
     public sub new()
        dim i, j as integer
        for i = 0 to 15
             for j = 0 to 25
                 parr(i,j) = 1                                        'isi bingkai
             next j
        next i
        for i = 3 to 12
             for j = 0 to 22
                 parr(i,j) = 0                                        'isi arena
             next j
        next i
     end sub

Metoda TestShape

Metoda ini berfungsi mengisi nilai dari shape ke posisi x,y dalam grid, dengan syarat parr(x,y)
masih 0
     'Menempatkan shape pada posisi x,y di grid
     public sub putshape(x as integer, y as integer, s as tshape)
        dim i as integer
        for i = 0 to 3



INDOPROG                                                                              36
Pemrograman Berorientasi Objek pada VB.NET                                   Hendra, S.T.


            parr(x+s.currentshapesel(i,0),         _
                 y+s.currentshapesel(i,1))         = 1
            carr(x+s.currentshapesel(i,0),         _
                 y+s.currentshapesel(i,1))         = s.currentcolor
       next i
    end sub

Misalnya putshape yang ke 4, keposisi 6,21 pada grid, yang akan mengisi nilai ke parr




Metoda TestShape

Metoda ini berfungsi mencoba apakah shape dapat ditempatkan pada posisi x,y dalam grid,
dengan syarat parr(x,y) masih 0
    'Mengembalikan nilai yang menunjukan apakah
    'shape dapat ditempatkan pada grid diposisi x,y
    public function testshape(x as integer, y as integer, s as tshape)_
                              as boolean
       dim i as integer
       for i = 0 to 3
           'apakah sel pada grid telah terisi ( > 0 )
           if parr(x+s.currentshapesel(i,0), _
                   y+s.currentshapesel(i,1)) > 0 then
              return false
           end if


INDOPROG                                                                                37
Pemrograman Berorientasi Objek pada VB.NET                                  Hendra, S.T.


       next i
       return true
    end function

Metoda CheckGrid

Metoda ini berfungsi memeriksa apakah ada baris dalam array parr yang berisi nilai 1 dari kolom
3 s/d 12.
    'periksa apakah ada baris yang berhasil diselesaikan pemain
    public function checkgrid() as integer
       dim i,j as integer
       dim b,k as integer
       dim complete as integer
       complete = 0
       i = 22
       do while i > 3
          j = 3
          do while parr(j,i) <> 0 and j < 13
              j=j+1
          loop
          if j = 13 then
              beep                                      'sound beep
              complete = complete + 1
              for b = i to 4 step -1
                   for k = 3 to 12
                       parr(k,b) = parr(k,b-1)
                       carr(k,b) = carr(k,b-1)
                   next k
              next b
          else
              i = i - 1
          end if
       loop
       return complete
    end function
end class




Misalnya array parr pada baris 22 berisi nilai 1 mulai baris 3 s/d 12, maka setelah metoda
ChekGrid dijalankan akan menghapus baris 22 dan mengeser baris diatasnya ke bawah, dan
mengembalikan nilai berapa baris yang berhasil diselesaikan.




INDOPROG                                                                            38
Pemrograman Berorientasi Objek pada VB.NET                                 Hendra, S.T.




Class Tetris
Class ini merupakan class utama permainan Tetris


Variabel yang digunakan
    private   withevents gtimer as new sistem.windows.forms.timer
    private   labelscore as new label
    private   labelgameover as new label
    private   gtgrid as new tgrid             'instance class tgrid
    private   gtshape as new tshape           'instance class tshape
    private   g as graphics
    private   x,y as integer                  'posisi x,y shape pada grid
    private   score as integer                'score permainan


Konstruktor Tetris
Berfungsi mempersiapkan tampilan form, seperti title form, ukuran form, menempatkan label
untuk keterangan score dan gameover, membuat objek Graphics yang akan digunakan untuk
menyediakan metoda pengambaran, serta mempersiapkan Shape berikutnya.

    public sub new()
       me.text = "Program Tetris"
       me.size = new size(450, 600)
       labelscore.location = new point(61,30)
       me.controls.add(labelscore)
       labelgameover.location = new point(200,30)
       me.controls.add(labelgameover)
       g = me.creategraphics()
       score = 0
       printscore()
       nextshape()                          'persiapkan shape berikutnya
    end sub


Metoda NextShape
Metoda ini berfungsi mempersiapkan shape berikutnya, dan menset interval timer 200 millidetik,
dan posisi awal shape mulai di posisi (7,0)
    'metoda mempersiapkan shape berikutnya
    private sub nextshape()
       gtimer.interval = 200                         'set interval 200 millidetik



INDOPROG                                                                           39
Pemrograman Berorientasi Objek pada VB.NET                                 Hendra, S.T.


       gtimer.enabled = true                         'mengaktifkan timer
       gtshape.generatenextshape()
       redrawnextshape()                             'cetak shape berikutnya
       x = 7                                         'koordinat awal di 7,0
       y = 0
    end sub


Metoda MoveShape
Metoda ini berfungsi menggambarkan animasi pergerakan Shape pada posisi x,y sesuai dengan
arah gerakan yang ditentukan pada dx dan dy, misalnya bergerak ke kiri, kama dx = -1, dy = 0
    'memindahkan shape keposisi x,y
    private sub movexy(dx,dy)
       clearshape()                                  'hapus gambar sebelumnya
       x = x + dx                                    'ubah posisi x,y
       y = y + dy
       drawshape()                                   'gambar diposisi baru
    end sub


Metoda MoveShape
Metoda ini berfungsi memperbaharui nilai score di layar

    'metoda untuk mencetak score dilayar
    private sub printscore()
       labelscore.text = "Score : " & score.tostring()
    end sub


Metoda MoveShape
Metoda ini berfungsi mengubah tulisan di labelgameover menjadi “Game Over”

    'metoda untuk mencetak gameover
    private sub printgameover()
       labelgameover.text = "Game Over"
    end sub


Event Tick
Event ini secara otomatis akan dibangkitkan oleh Timer secara berkala untuk mengerakan Shape
ke bawah, dengan senantiasa apakah Shape telah mencapai batas gerakan, jika ya, maka akan
memanggil metoda putshape pada TGrid.

Jika Shape tertahan dibaris < 3 artinya Game Over
    'mengerakan shape ke bawah dengan interval waktu tertentu
    private sub gtimer_tick(sender as object, e as eventargs) _
                handles gtimer.tick
       'apakah shape masih bisa turun kebawah
       if gtgrid.testshape(x,y+1,gtshape) then



INDOPROG                                                                           40
Pemrograman Berorientasi Objek pada VB.NET                                Hendra, S.T.


          movexy(0,1)     'jika ya pindah shape 1 baris ke bawah
       else
          gtgrid.putshape(x,y,gtshape)         'tempatkan shape kegrid
          score = score + gtgrid.checkgrid() 'periksa baris yang lengkap
          redrawgrid()                         'cetak ulang grid
          printscore()                         'cetak score
          'jika shape tertahan di baris 3, artinya game over
          if y < 3 then
              gtimer.enabled = false 'matikan timer karena gameover
              printgameover()                  'tampil pesan gameover
          else
              nextshape()                      'persiapkan gambar berikutnya
          end if
       end if
    end sub


Event KeyDown
Event ini secara otomatis akan dibangkitkan apabila adanya penekanan tombol oleh pemakai,
Jika panah atas akan merotasi shape
jika panah kiri akan mengerakan shape ke kiri
jika panah kanan akan mengerakan shape ke kanan
jika panah bawah akan mempercepat turunya shape
    'deteksi penekanan tombol dengan event keydown pada form
    private sub tetris_keydown(sender as object, e as keyeventargs) _
                handles mybase.keydown
       select case e.keyvalue
              case 38, 104, 12,101 : 'Panah atas, 8, 5
                        gtshape.rotate()      'rotasi
                        'apakah hasil rotasi dapat ditempatkan diposisi x,y
                        if gtgrid.testshape(x,y,gtshape) then
                           'kalau ya, rotasi balik kembali
                           gtshape.derotate()
                           clearshape()       'hapus animasi shape
                           gtshape.rotate() 'rotasi
                           drawshape()        'gambar shape ke layar
                        else
                           gtshape.derotate()
                        end if
              case 37, 100 : 'Panah kiri, 4
                        'jika shape dapat ditempatkan kekiri
                        if gtgrid.testshape(x-1,y,gtshape) then
                           movexy(-1,0)       'pindah ke kiri
                        end if
              case 39, 102 : 'Panah kanan, 6
                        if gtgrid.testshape(x+1,y,gtshape) then
                           movexy(1,0)
                        end if
              case 40, 98 : 'Panah bawah, 2 interval dipercepat
                        gtimer.interval = 10
       end select
    end sub




INDOPROG                                                                          41
Pemrograman Berorientasi Objek pada VB.NET                                Hendra, S.T.


Metoda DrawSel
Metoda ini berfungsi menggambar sel Shape ke layar untuk animasi, metoda ini akan dipanggil
oleh metoda drawshape dan OnPaint
    'menggambar sel dari suatu shape
    private sub drawsel(pen as pen, brush as brush, _
                        x as integer, y as integer, _
                        w as integer, h as integer)
    if y > 2 then
       g.fillrectangle(brush,x*21,y*21,w,h)
       g.drawrectangle(pen,x*21,y*21,w,h)
    end if
    end sub


Metoda DrawShape
Metoda ini berfungsi menggambar Shape ke layar dengan memanggil metoda DrawSel untuk
masing-masing sel
    'mengambar shape secara sementara
    private sub drawshape()
       dim i as integer
       dim pen as new pen(color.white,1)
       dim brush as new solidbrush(gtshape.currentcolor)
       for i = 0 to 3
            drawsel(pen,brush, _
                    x+gtshape.currentshapesel(i,0), _
                    y+gtshape.currentshapesel(i,1), _
                    20,20)
       next i
    end sub


Metoda DrawShape
Metoda ini berfungsi menghapus Shape di layar dengan memanggil metoda DrawSel untuk
masing-masing sel (warna hitam)
    'menghapus shape sementara
    private sub clearshape()
       dim i as integer
       dim pen as new pen(color.black,1)
       dim brush as new solidbrush(color.black)
       for i = 0 to 3
            drawsel(pen,brush, _
                    x+gtshape.currentshapesel(i,0), _
                    y+gtshape.currentshapesel(i,1),20,20)
       next i
    end sub


Metoda ReDrawNextShape
Metoda ini berfungsi menggambar NextShape di layar setiap adanya perubahan nextshape



INDOPROG                                                                          42
Pemrograman Berorientasi Objek pada VB.NET                                  Hendra, S.T.


    'mengambar ulang nextshape
    private sub redrawnextshape
       dim i as integer
       dim pen as new pen(color.black,1)
       dim brush as new solidbrush(color.black)
       g.fillrectangle(brush,300,60,120,120)
       pen.color = color.white
       brush.color = gtshape.nextcolor
       for i = 0 to 3
            drawsel(pen,brush, _
                    16+gtshape.nextshapesel(i,0), _
                    4+gtshape.nextshapesel(i,1), _
                    20,20)
       next i
    end sub


Metoda ReDrawGrid
Metoda ini berfungsi menggambar ulang Grid dilayar
    'mengambar ulang grid
    private sub redrawgrid
       dim i,j as integer
       dim pen as new pen(color.white,1)
       dim brush as new solidbrush(color.red)
       for i = 3 to 12
            for j = 3 to 22
                if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid
                   pen.color = color.white
                   brush.color = gtgrid.carr(i,j)
                   drawsel(pen,brush,i,j,20,20)
                else
                   pen.color = color.black
                   brush.color = color.black
                   drawsel(pen,brush,i,j,20,20)
                end if
            next j
       next i
       pen.color = color.black
       g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1)
    end sub


Metoda OnPaint
Metoda OnPaint akan secara otomatis diaktifkan oleh windows setiap kali layar form Tetris
digambar ulang (misalnya waktu Maximize dan Minimize)
    'melakukan overide terhadap sub onpaint pada base class
    'untuk menggambar isi grid setiap proses refresh pada form
    protected overrides sub onpaint(e as painteventargs)
       redrawgrid()
       redrawnextshape()
    end sub




INDOPROG                                                                            43
Pemrograman Berorientasi Objek pada VB.NET                      Hendra, S.T.



Program Kongkret
option explicit on
imports sistem
imports sistem.drawing
imports sistem.windows.forms
imports microsoft.visualbasic

public class tetris : inherits sistem.windows.forms.form

    <sistem.STAThread> _
    public shared sub main()
       randomize()
       application.run(new tetris)
    end sub

    private   withevents gtimer as new sistem.windows.forms.timer
    private   labelscore as new label
    private   labelgameover as new label
    private   gtgrid as new tgrid             'instance class tgrid
    private   gtshape as new tshape           'instance class tshape
    private   g as graphics
    private   x,y as integer                  'posisi x,y shape pada grid
    private   score as integer                'score permainan

    public sub new()
       me.text = "Program Tetris"
       me.size = new size(450, 600)
       labelscore.location = new point(61,30)
       me.controls.add(labelscore)
       labelgameover.location = new point(200,30)
       me.controls.add(labelgameover)
       g = me.creategraphics()
       score = 0
       printscore()
       nextshape()                          'persiapkan shape berikutnya
    end sub

    'metoda mempersiapkan shape berikutnya
    private sub nextshape()
       gtimer.interval = 200                  'set interval 200 millidetik
       gtimer.enabled = true                  'mengaktifkan timer
       gtshape.generatenextshape()
       redrawnextshape()                      'cetak shape berikutnya
       x = 7                                  'koordinat awal di 7,0
       y = 0
    end sub

    'memindahkan shape keposisi x,y
    private sub movexy(dx,dy)
       clearshape()                           'hapus gambar sebelumnya
       x = x + dx                             'ubah posisi x,y
       y = y + dy
       drawshape()                            'gambar diposisi baru
    end sub



INDOPROG                                                                 44
Pemrograman Berorientasi Objek pada VB.NET                      Hendra, S.T.


    'metoda untuk mencetak score dilayar
    private sub printscore()
       labelscore.text = "Score : " & score.tostring()
    end sub

    'metoda untuk mencetak gameover
    private sub printgameover()
       labelgameover.text = "Game Over"
    end sub

    'mengerakan shape ke bawah dengan interval waktu tertentu
    private sub gtimer_tick(sender as object, e as eventargs) _
                 handles gtimer.tick
       'apakah shape bisa turun kebawah
       if gtgrid.testshape(x,y+1,gtshape) then
          movexy(0,1)     'pindah shape 1 baris ke bawah
       else
          gtgrid.putshape(x,y,gtshape)         'tempatkan shape kegrid
          score = score + gtgrid.checkgrid() 'periksa baris yang lengkap
          redrawgrid()                         'cetak ulang grid
          printscore()                         'cetak score
          'jika shape tertahan di baris 3, artinya game over
          if y < 3 then
              gtimer.enabled = false 'matikan timer karena gameover
              printgameover()                  'tampil pesan gameover
          else
              nextshape()                      'persiapkan gambar berikutnya
          end if
       end if
    end sub

    'deteksi penekanan tombol dengan event keydown pada form
    private sub tetris_keydown(sender as object, e as keyeventargs) _
                handles mybase.keydown
       select case e.keyvalue
              case 38, 104, 12,101 : 'Panah atas, 8, 5
                        gtshape.rotate()      'rotasi
                        'apakah hasil rotasi dapat ditempatkan diposisi x,y
                        if gtgrid.testshape(x,y,gtshape) then
                           'kalau ya, rotasi balik kembali
                           gtshape.derotate()
                           clearshape()       'hapus animasi shape
                           gtshape.rotate() 'rotasi
                           drawshape()        'gambar shape ke layar
                        else
                           gtshape.derotate()
                        end if
              case 37, 100 : 'Panah kiri, 4
                        'jika shape dapat ditempatkan kekiri
                        if gtgrid.testshape(x-1,y,gtshape) then
                           movexy(-1,0)       'pindah ke kiri
                        end if
              case 39, 102 : 'Panah kanan, 6
                        if gtgrid.testshape(x+1,y,gtshape) then
                           movexy(1,0)
                        end if
              case 40, 98 : 'Panah bawah, 2 interval dipercepat


INDOPROG                                                                45
Pemrograman Berorientasi Objek pada VB.NET                  Hendra, S.T.


                         gtimer.interval = 10
       end select
    end sub

    'menggambar sel dari suatu shape
    private sub drawsel(pen as pen, brush as brush, _
                        x as integer, y as integer, _
                        w as integer, h as integer)
    if y > 2 then
       g.fillrectangle(brush,x*21,y*21,w,h)
       g.drawrectangle(pen,x*21,y*21,w,h)
    end if
    end sub

    'mengambar shape secara sementara
    private sub drawshape()
       dim i as integer
       dim pen as new pen(color.white,1)
       dim brush as new solidbrush(gtshape.currentcolor)
       for i = 0 to 3
            drawsel(pen,brush, _
                    x+gtshape.currentshapesel(i,0), _
                    y+gtshape.currentshapesel(i,1), _
                    20,20)
       next i
    end sub

    'menghapus shape sementara
    private sub clearshape()
       dim i as integer
       dim pen as new pen(color.black,1)
       dim brush as new solidbrush(color.black)
       for i = 0 to 3
            drawsel(pen,brush, _
                    x+gtshape.currentshapesel(i,0), _
                    y+gtshape.currentshapesel(i,1),20,20)
       next i
    end sub

    'mengambar ulang nextshape
    private sub redrawnextshape
       dim i as integer
       dim pen as new pen(color.black,1)
       dim brush as new solidbrush(color.black)
       g.fillrectangle(brush,300,60,120,120)
       pen.color = color.white
       brush.color = gtshape.nextcolor
       for i = 0 to 3
            drawsel(pen,brush, _
                    16+gtshape.nextshapesel(i,0), _
                    4+gtshape.nextshapesel(i,1), _
                    20,20)
       next i
    end sub


    'mengambar ulang grid


INDOPROG                                                            46
Pemrograman Berorientasi Objek pada VB.NET                       Hendra, S.T.


    private sub redrawgrid
       dim i,j as integer
       dim pen as new pen(color.white,1)
       dim brush as new solidbrush(color.red)
       for i = 3 to 12
            for j = 3 to 22
                if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid
                   pen.color = color.white
                   brush.color = gtgrid.carr(i,j)
                   drawsel(pen,brush,i,j,20,20)
                else
                   pen.color = color.black
                   brush.color = color.black
                   drawsel(pen,brush,i,j,20,20)
                end if
            next j
       next i
       pen.color = color.black
       g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1)
    end sub

    'melakukan overide terhadap sub onpaint pada base class
    'untuk menggambar isi grid setiap proses refresh pada form
    protected overrides sub onpaint(e as painteventargs)
       redrawgrid()
       redrawnextshape()
    end sub

end class


public class tgrid
     public parr(15,25) as integer            'Array menyimpan isi sel pada
grid
     public carr(15,25) as color              'Array menyimpan warna sel pada
grid

    'konstruktur class tgrid
    public sub new()
       dim i, j as integer
       for i = 0 to 15
            for j = 0 to 25
                parr(i,j) = 1                 'isi bingkai
            next j
       next i
       for i = 3 to 12
            for j = 0 to 22
                parr(i,j) = 0                 'isi arena
            next j
       next i
    end sub

    'Mengembalikan nilai yang menunjukan apakah
    'shape dapat ditempatkan pada grid diposisi x,y
    public function testshape(x as integer, y as integer, s as tshape) _
                              as boolean
       dim i as integer


INDOPROG                                                                 47
Pemrograman Berorientasi Objek pada VB.NET                         Hendra, S.T.


       for i = 0 to 3
           'apakah sel pada grid telah terisi
           if parr(x+s.currentshapesel(i,0), _
                   y+s.currentshapesel(i,1)) > 0 then
              return false
           end if
       next i
       return true
    end function

    'Menempatkan shape pada posisi x,y di grid
    public sub putshape(x as integer, y as integer, s as tshape)
       dim i as integer
       for i = 0 to 3
            parr(x+s.currentshapesel(i,0), _
                 y+s.currentshapesel(i,1)) = 1
            carr(x+s.currentshapesel(i,0), _
                 y+s.currentshapesel(i,1)) = s.currentcolor
       next i
    end sub

    'periksa apakah ada baris yang berhasil diselesaikan pemain
    public function checkgrid() as integer
       dim i,j as integer
       dim b,k as integer
       dim complete as integer
       complete = 0
       i = 22
       do while i > 3
          j = 3
          do while parr(j,i) <> 0 and j < 13
              j=j+1
          loop
          if j = 13 then
              beep                                      'sound beep
              complete = complete + 1
              for b = i to 4 step -1
                   for k = 3 to 12
                       parr(k,b) = parr(k,b-1)
                       carr(k,b) = carr(k,b-1)
                   next k
              next b
          else
              i = i - 1
          end if
       loop
       return complete
    end function
end class

public class tshape
    private currentshape   as integer         'menyimpan   nomor   current shape
    private nextshape as   integer            'menyimpan   nomor   next shape
    public currentcolor    as color           'menyimpan   warna   current shape
    public nextcolor as    color              'menyimpan   warna   next shape

    private currentstate as integer           'nomor rotasi shape


INDOPROG                                                                   48
Pemrograman Berorientasi Objek pada VB.NET                    Hendra, S.T.



    'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk
    'serta bentuk rotasinya
    private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _
                                    {{0,1},{1,1},{2,1},{3,1}}, _
                                    {{1,0},{1,1},{1,2},{1,3}}, _
                                    {{0,1},{1,1},{2,1},{3,1}}}, _
                                   {{{0,0},{0,1},{1,0},{1,1}}, _
                                    {{0,0},{0,1},{1,0},{1,1}}, _
                                    {{0,0},{0,1},{1,0},{1,1}}, _
                                    {{0,0},{0,1},{1,0},{1,1}}}, _
                                   {{{0,0},{0,1},{0,2},{1,2}}, _
                                    {{0,0},{0,1},{1,0},{2,0}}, _
                                    {{0,0},{1,0},{1,1},{1,2}}, _
                                    {{0,1},{1,1},{2,0},{2,1}}}, _
                                   {{{0,0},{0,1},{0,2},{1,1}}, _
                                    {{0,0},{1,0},{1,1},{2,0}}, _
                                    {{1,0},{0,1},{1,1},{1,2}}, _
                                    {{0,1},{1,0},{1,1},{2,1}}}, _
                                   {{{0,0},{0,1},{1,1},{1,2}}, _
                                    {{0,1},{1,0},{1,1},{2,0}}, _
                                    {{0,0},{0,1},{1,1},{1,2}}, _
                                    {{0,1},{1,0},{1,1},{2,0}}}, _
                                   {{{0,1},{0,2},{1,0},{1,1}}, _
                                    {{0,0},{1,0},{1,1},{2,1}}, _
                                    {{0,1},{0,2},{1,0},{1,1}}, _
                                    {{0,0},{1,0},{1,1},{2,1}}}}

   'konstrutor untuk class tshape
   public sub new()
      generateshape(nextshape, nextcolor)
   end sub

   'Membuat next shape berikutnya, dan menset current shape
   public sub generatenextshape()
      currentshape = nextshape
      currentcolor = nextcolor
      currentstate = 0                          'rotasi ke 0
      generateshape(nextshape, nextcolor)       'buat nextshape baru
    end sub

   'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor
   private sub generateshape(byref shape as integer, _
                              byref shapecolor as color)
      dim c as integer
      shape = int(rnd*6)                         'random untuk shape
      c = int(rnd*8)                             'random untuk shape color
      select case c
         case 0 : shapecolor = color.red
         case 1 : shapecolor = color.green
         case 2 : shapecolor = color.blue
         case 3 : shapecolor = color.orange
         case 4 : shapecolor = color.pink
         case 5 : shapecolor = color.cyan
         case 6 : shapecolor = color.gray
         case else
                   shapecolor = color.magenta


INDOPROG                                                               49
Pemrograman Berorientasi Objek pada VB.NET                                      Hendra, S.T.


       end select
     end sub

     'Rotasi ke bentuk berikutnya
     public sub rotate()
       currentstate = currentstate + 1                            'Rotasi berikutnya
       if currentstate = 4 then currentstate = 0                  'Kembali ke bentuk awal
     end sub

     'Rotasi ke bentuk sebelumnya
     public sub derotate()
       currentstate = currentstate - 1                            'Rotasi sebelumnya
       if currentstate = -1 then currentstate = 3
     end sub

     'Mengembalikan sel i,j dari current shape
     public function currentshapesel(i as integer, j as integer)
       return sarr(currentshape,currentstate,i,j)
     end function

     'Mengembalikan sel i,j dari next shape
     public function nextshapesel(i as integer, j as integer)
       return sarr(nextshape,0,i,j)                  'Bentuk awal
     end function

end class



Kompilasi Program
Vbc tetris.vb /r:sistem.dll /r:sistem.drawing.dll /r:sistem.windows.forms.dll




INDOPROG                                                                                50

More Related Content

What's hot

What's hot (17)

Modul praktikum PBO
Modul praktikum PBOModul praktikum PBO
Modul praktikum PBO
 
Object oriented programming (oop)
Object oriented programming (oop)Object oriented programming (oop)
Object oriented programming (oop)
 
OOP Dalam Pemrograman Java
OOP Dalam Pemrograman JavaOOP Dalam Pemrograman Java
OOP Dalam Pemrograman Java
 
Materi delphi
Materi delphiMateri delphi
Materi delphi
 
Tugas Praktikum Pemrograman Berorientasi Objek
Tugas Praktikum Pemrograman Berorientasi ObjekTugas Praktikum Pemrograman Berorientasi Objek
Tugas Praktikum Pemrograman Berorientasi Objek
 
Pengenalan Java
Pengenalan JavaPengenalan Java
Pengenalan Java
 
Pengertian pemrograman terstruktur
Pengertian pemrograman terstrukturPengertian pemrograman terstruktur
Pengertian pemrograman terstruktur
 
Java (Netbeans) - Abstract & Interface - Object Oriented Programming
Java (Netbeans) - Abstract & Interface - Object Oriented ProgrammingJava (Netbeans) - Abstract & Interface - Object Oriented Programming
Java (Netbeans) - Abstract & Interface - Object Oriented Programming
 
Aplikasi pemrograman
Aplikasi pemrogramanAplikasi pemrograman
Aplikasi pemrograman
 
Second task bu okta 2 edit
Second task bu okta 2 editSecond task bu okta 2 edit
Second task bu okta 2 edit
 
4 abstract class, interface
4 abstract class, interface4 abstract class, interface
4 abstract class, interface
 
JAVA
JAVAJAVA
JAVA
 
Modul Object Oriented Programming
Modul Object Oriented ProgrammingModul Object Oriented Programming
Modul Object Oriented Programming
 
Java (Netbeans) Polymorphism - Object Oriented Programming (OOP)
Java (Netbeans) Polymorphism - Object Oriented Programming (OOP)Java (Netbeans) Polymorphism - Object Oriented Programming (OOP)
Java (Netbeans) Polymorphism - Object Oriented Programming (OOP)
 
Pengantar Pemrograman Berorientasi Objek
Pengantar Pemrograman Berorientasi ObjekPengantar Pemrograman Berorientasi Objek
Pengantar Pemrograman Berorientasi Objek
 
Pemrograman berorientasi objek lanjutan
Pemrograman berorientasi objek lanjutanPemrograman berorientasi objek lanjutan
Pemrograman berorientasi objek lanjutan
 
Asep java-01-konsep-oop-050608
Asep java-01-konsep-oop-050608Asep java-01-konsep-oop-050608
Asep java-01-konsep-oop-050608
 

Viewers also liked

Viewers also liked (7)

Lecture06 javascript1
Lecture06 javascript1Lecture06 javascript1
Lecture06 javascript1
 
Pemrogaman Visual Basic.NET (Modul 1)
Pemrogaman Visual Basic.NET (Modul 1)Pemrogaman Visual Basic.NET (Modul 1)
Pemrogaman Visual Basic.NET (Modul 1)
 
Pemodelan Basis Data Lainnya
Pemodelan Basis Data LainnyaPemodelan Basis Data Lainnya
Pemodelan Basis Data Lainnya
 
Arsitektur Sistem Basis Data
Arsitektur Sistem Basis DataArsitektur Sistem Basis Data
Arsitektur Sistem Basis Data
 
Pengenalan Rekayasa Perangkat Lunak
Pengenalan Rekayasa Perangkat LunakPengenalan Rekayasa Perangkat Lunak
Pengenalan Rekayasa Perangkat Lunak
 
Sekilas tentang HaKI
Sekilas tentang HaKISekilas tentang HaKI
Sekilas tentang HaKI
 
E book vb.net+mysql(cara cepat)
E book vb.net+mysql(cara cepat)E book vb.net+mysql(cara cepat)
E book vb.net+mysql(cara cepat)
 

Similar to Pemrogaman Visual Basic.NET (Modul 4)

Uts pemrograman berbasis obj
Uts pemrograman berbasis objUts pemrograman berbasis obj
Uts pemrograman berbasis objJulianGultom2
 
Pertemuan 2 Konsep Dasar Pemrograman OOP
Pertemuan 2 Konsep Dasar Pemrograman OOPPertemuan 2 Konsep Dasar Pemrograman OOP
Pertemuan 2 Konsep Dasar Pemrograman OOPProdiTIPenusa
 
Materi-1-sd-2-Pengenalan-PBO.pptx
Materi-1-sd-2-Pengenalan-PBO.pptxMateri-1-sd-2-Pengenalan-PBO.pptx
Materi-1-sd-2-Pengenalan-PBO.pptxHallendAfroni1
 
516206149-Solid-Principle-Dan-Design-Pattern.pptx
516206149-Solid-Principle-Dan-Design-Pattern.pptx516206149-Solid-Principle-Dan-Design-Pattern.pptx
516206149-Solid-Principle-Dan-Design-Pattern.pptxAdityaSuryani1
 
Pengenalan OOP
Pengenalan OOPPengenalan OOP
Pengenalan OOPdaffa12
 
Part 8 - Object Oriented Programming
Part 8 - Object Oriented ProgrammingPart 8 - Object Oriented Programming
Part 8 - Object Oriented ProgrammingRolly Yesputra
 
Pemograman berorientasi obyek kelompok 6
Pemograman berorientasi obyek kelompok 6Pemograman berorientasi obyek kelompok 6
Pemograman berorientasi obyek kelompok 6ゴースト アノン
 
0-Pengantar Pemrograman lanjut.pptx
0-Pengantar Pemrograman lanjut.pptx0-Pengantar Pemrograman lanjut.pptx
0-Pengantar Pemrograman lanjut.pptxBom Bom
 
2019 Format Article Tugas ( EKA MEI RISTIANTI PBD ).pdf
2019 Format Article Tugas ( EKA MEI RISTIANTI   PBD ).pdf2019 Format Article Tugas ( EKA MEI RISTIANTI   PBD ).pdf
2019 Format Article Tugas ( EKA MEI RISTIANTI PBD ).pdfssuser6c0737
 
Pbo perbandingan antara pemrograman procedural dengan pemrograman beroriant...
Pbo   perbandingan antara pemrograman procedural dengan pemrograman beroriant...Pbo   perbandingan antara pemrograman procedural dengan pemrograman beroriant...
Pbo perbandingan antara pemrograman procedural dengan pemrograman beroriant...Wahyu Zakwan
 
OOP, NET FRAMEWORK, C#
OOP, NET FRAMEWORK, C#OOP, NET FRAMEWORK, C#
OOP, NET FRAMEWORK, C#NisaRahmawati4
 
Pengenalan_Materi-Paradigman_PBO-fix.pptx
Pengenalan_Materi-Paradigman_PBO-fix.pptxPengenalan_Materi-Paradigman_PBO-fix.pptx
Pengenalan_Materi-Paradigman_PBO-fix.pptxngajiyanto .
 
Pengantar Pengembangan Sistem Berorientasi Objek.pptx
Pengantar Pengembangan Sistem Berorientasi Objek.pptxPengantar Pengembangan Sistem Berorientasi Objek.pptx
Pengantar Pengembangan Sistem Berorientasi Objek.pptxDzulFadliRahman1
 
PERTEMUAN 2-KONSEP OOP.ppt
PERTEMUAN 2-KONSEP OOP.pptPERTEMUAN 2-KONSEP OOP.ppt
PERTEMUAN 2-KONSEP OOP.pptarfa442827
 
Pemrograman berbasis objek
Pemrograman berbasis objekPemrograman berbasis objek
Pemrograman berbasis objekRika Pertiwi
 

Similar to Pemrogaman Visual Basic.NET (Modul 4) (20)

Uts pemrograman berbasis obj
Uts pemrograman berbasis objUts pemrograman berbasis obj
Uts pemrograman berbasis obj
 
Pertemuan 2 Konsep Dasar Pemrograman OOP
Pertemuan 2 Konsep Dasar Pemrograman OOPPertemuan 2 Konsep Dasar Pemrograman OOP
Pertemuan 2 Konsep Dasar Pemrograman OOP
 
Materi-1-sd-2-Pengenalan-PBO.pptx
Materi-1-sd-2-Pengenalan-PBO.pptxMateri-1-sd-2-Pengenalan-PBO.pptx
Materi-1-sd-2-Pengenalan-PBO.pptx
 
516206149-Solid-Principle-Dan-Design-Pattern.pptx
516206149-Solid-Principle-Dan-Design-Pattern.pptx516206149-Solid-Principle-Dan-Design-Pattern.pptx
516206149-Solid-Principle-Dan-Design-Pattern.pptx
 
Pengenalan OOP
Pengenalan OOPPengenalan OOP
Pengenalan OOP
 
Part 8 - Object Oriented Programming
Part 8 - Object Oriented ProgrammingPart 8 - Object Oriented Programming
Part 8 - Object Oriented Programming
 
Pemograman berorientasi obyek kelompok 6
Pemograman berorientasi obyek kelompok 6Pemograman berorientasi obyek kelompok 6
Pemograman berorientasi obyek kelompok 6
 
0-Pengantar Pemrograman lanjut.pptx
0-Pengantar Pemrograman lanjut.pptx0-Pengantar Pemrograman lanjut.pptx
0-Pengantar Pemrograman lanjut.pptx
 
2019 Format Article Tugas ( EKA MEI RISTIANTI PBD ).pdf
2019 Format Article Tugas ( EKA MEI RISTIANTI   PBD ).pdf2019 Format Article Tugas ( EKA MEI RISTIANTI   PBD ).pdf
2019 Format Article Tugas ( EKA MEI RISTIANTI PBD ).pdf
 
Pbo perbandingan antara pemrograman procedural dengan pemrograman beroriant...
Pbo   perbandingan antara pemrograman procedural dengan pemrograman beroriant...Pbo   perbandingan antara pemrograman procedural dengan pemrograman beroriant...
Pbo perbandingan antara pemrograman procedural dengan pemrograman beroriant...
 
OOP, NET FRAMEWORK, C#
OOP, NET FRAMEWORK, C#OOP, NET FRAMEWORK, C#
OOP, NET FRAMEWORK, C#
 
Tugas pbo
Tugas pboTugas pbo
Tugas pbo
 
Choirul vbnet-01
Choirul vbnet-01Choirul vbnet-01
Choirul vbnet-01
 
Modul pbo
Modul pboModul pbo
Modul pbo
 
Pengenalan_Materi-Paradigman_PBO-fix.pptx
Pengenalan_Materi-Paradigman_PBO-fix.pptxPengenalan_Materi-Paradigman_PBO-fix.pptx
Pengenalan_Materi-Paradigman_PBO-fix.pptx
 
Pengantar Pengembangan Sistem Berorientasi Objek.pptx
Pengantar Pengembangan Sistem Berorientasi Objek.pptxPengantar Pengembangan Sistem Berorientasi Objek.pptx
Pengantar Pengembangan Sistem Berorientasi Objek.pptx
 
Pengantar PBO
Pengantar PBOPengantar PBO
Pengantar PBO
 
PERTEMUAN 2-KONSEP OOP.ppt
PERTEMUAN 2-KONSEP OOP.pptPERTEMUAN 2-KONSEP OOP.ppt
PERTEMUAN 2-KONSEP OOP.ppt
 
class method object
class method objectclass method object
class method object
 
Pemrograman berbasis objek
Pemrograman berbasis objekPemrograman berbasis objek
Pemrograman berbasis objek
 

More from Materi Kuliah Online

Melangkah dengan Microsoft Windows Server 2003
Melangkah dengan Microsoft Windows Server 2003Melangkah dengan Microsoft Windows Server 2003
Melangkah dengan Microsoft Windows Server 2003Materi Kuliah Online
 
Studi Mengenai Aspek Privasi pada Sistem RFID
Studi Mengenai Aspek Privasi pada Sistem RFIDStudi Mengenai Aspek Privasi pada Sistem RFID
Studi Mengenai Aspek Privasi pada Sistem RFIDMateri Kuliah Online
 
Internet dan Layanan Aplikasi Terdistribusi
Internet dan Layanan Aplikasi TerdistribusiInternet dan Layanan Aplikasi Terdistribusi
Internet dan Layanan Aplikasi TerdistribusiMateri Kuliah Online
 
Aspek Security pada Penerapan m-Commerce di Indonesia
Aspek Security pada Penerapan m-Commerce di IndonesiaAspek Security pada Penerapan m-Commerce di Indonesia
Aspek Security pada Penerapan m-Commerce di IndonesiaMateri Kuliah Online
 
A Comparison of Proximity Authentication Approaches
A Comparison of Proximity Authentication ApproachesA Comparison of Proximity Authentication Approaches
A Comparison of Proximity Authentication ApproachesMateri Kuliah Online
 
Kajian Perkembangan Teknologi Smart Card dari Segi Keamanan
Kajian Perkembangan Teknologi Smart Card dari Segi KeamananKajian Perkembangan Teknologi Smart Card dari Segi Keamanan
Kajian Perkembangan Teknologi Smart Card dari Segi KeamananMateri Kuliah Online
 
Catu Daya dan Rangkaian Penyearah Gelombang
Catu Daya dan Rangkaian Penyearah GelombangCatu Daya dan Rangkaian Penyearah Gelombang
Catu Daya dan Rangkaian Penyearah GelombangMateri Kuliah Online
 
Simulasi Anti Integral Windup dengan Clamp Integrator
Simulasi Anti Integral Windup dengan Clamp IntegratorSimulasi Anti Integral Windup dengan Clamp Integrator
Simulasi Anti Integral Windup dengan Clamp IntegratorMateri Kuliah Online
 
Prinsip-prinsip Asas E-Construction, K-Constructions dan Groupware Technology
Prinsip-prinsip Asas E-Construction, K-Constructions dan Groupware TechnologyPrinsip-prinsip Asas E-Construction, K-Constructions dan Groupware Technology
Prinsip-prinsip Asas E-Construction, K-Constructions dan Groupware TechnologyMateri Kuliah Online
 
Penggunaan DT-51 Untuk Komunikasi Mikrokontroler Melalui Jaringan Telepon
Penggunaan DT-51 Untuk Komunikasi Mikrokontroler Melalui Jaringan TeleponPenggunaan DT-51 Untuk Komunikasi Mikrokontroler Melalui Jaringan Telepon
Penggunaan DT-51 Untuk Komunikasi Mikrokontroler Melalui Jaringan TeleponMateri Kuliah Online
 
Penggunaan DT-Basic Untuk Membaca Nomor Identitas Secara Wireless
Penggunaan DT-Basic Untuk Membaca Nomor Identitas Secara WirelessPenggunaan DT-Basic Untuk Membaca Nomor Identitas Secara Wireless
Penggunaan DT-Basic Untuk Membaca Nomor Identitas Secara WirelessMateri Kuliah Online
 
Proses dan Penjadualan : Prioritas dan Multiprosesor
Proses dan Penjadualan : Prioritas dan MultiprosesorProses dan Penjadualan : Prioritas dan Multiprosesor
Proses dan Penjadualan : Prioritas dan MultiprosesorMateri Kuliah Online
 
Pembuatan Rangkaian Adaptor dengan Keluaran 5V dan 12V
Pembuatan Rangkaian Adaptor dengan Keluaran 5V dan 12VPembuatan Rangkaian Adaptor dengan Keluaran 5V dan 12V
Pembuatan Rangkaian Adaptor dengan Keluaran 5V dan 12VMateri Kuliah Online
 
Konsep Pendidikan Tinggi Berbasis E-Learning
Konsep Pendidikan Tinggi Berbasis E-LearningKonsep Pendidikan Tinggi Berbasis E-Learning
Konsep Pendidikan Tinggi Berbasis E-LearningMateri Kuliah Online
 
Pengaturan Level Sistem SCPC-FM untuk Memperoleh Performansi yang Baik dalam ...
Pengaturan Level Sistem SCPC-FM untuk Memperoleh Performansi yang Baik dalam ...Pengaturan Level Sistem SCPC-FM untuk Memperoleh Performansi yang Baik dalam ...
Pengaturan Level Sistem SCPC-FM untuk Memperoleh Performansi yang Baik dalam ...Materi Kuliah Online
 

More from Materi Kuliah Online (20)

Access control-systems
Access control-systemsAccess control-systems
Access control-systems
 
Melangkah dengan Microsoft Windows Server 2003
Melangkah dengan Microsoft Windows Server 2003Melangkah dengan Microsoft Windows Server 2003
Melangkah dengan Microsoft Windows Server 2003
 
Studi Mengenai Aspek Privasi pada Sistem RFID
Studi Mengenai Aspek Privasi pada Sistem RFIDStudi Mengenai Aspek Privasi pada Sistem RFID
Studi Mengenai Aspek Privasi pada Sistem RFID
 
Remote control alarm sepeda motor
Remote control alarm sepeda motorRemote control alarm sepeda motor
Remote control alarm sepeda motor
 
Internet dan Layanan Aplikasi Terdistribusi
Internet dan Layanan Aplikasi TerdistribusiInternet dan Layanan Aplikasi Terdistribusi
Internet dan Layanan Aplikasi Terdistribusi
 
Aspek Security pada Penerapan m-Commerce di Indonesia
Aspek Security pada Penerapan m-Commerce di IndonesiaAspek Security pada Penerapan m-Commerce di Indonesia
Aspek Security pada Penerapan m-Commerce di Indonesia
 
A Comparison of Proximity Authentication Approaches
A Comparison of Proximity Authentication ApproachesA Comparison of Proximity Authentication Approaches
A Comparison of Proximity Authentication Approaches
 
Kajian Perkembangan Teknologi Smart Card dari Segi Keamanan
Kajian Perkembangan Teknologi Smart Card dari Segi KeamananKajian Perkembangan Teknologi Smart Card dari Segi Keamanan
Kajian Perkembangan Teknologi Smart Card dari Segi Keamanan
 
Catu Daya dan Rangkaian Penyearah Gelombang
Catu Daya dan Rangkaian Penyearah GelombangCatu Daya dan Rangkaian Penyearah Gelombang
Catu Daya dan Rangkaian Penyearah Gelombang
 
Dioda dan Catu Daya
Dioda dan Catu DayaDioda dan Catu Daya
Dioda dan Catu Daya
 
Simulasi Anti Integral Windup dengan Clamp Integrator
Simulasi Anti Integral Windup dengan Clamp IntegratorSimulasi Anti Integral Windup dengan Clamp Integrator
Simulasi Anti Integral Windup dengan Clamp Integrator
 
Radio Frequency Identification
Radio Frequency IdentificationRadio Frequency Identification
Radio Frequency Identification
 
Prinsip-prinsip Asas E-Construction, K-Constructions dan Groupware Technology
Prinsip-prinsip Asas E-Construction, K-Constructions dan Groupware TechnologyPrinsip-prinsip Asas E-Construction, K-Constructions dan Groupware Technology
Prinsip-prinsip Asas E-Construction, K-Constructions dan Groupware Technology
 
Penggunaan DT-51 Untuk Komunikasi Mikrokontroler Melalui Jaringan Telepon
Penggunaan DT-51 Untuk Komunikasi Mikrokontroler Melalui Jaringan TeleponPenggunaan DT-51 Untuk Komunikasi Mikrokontroler Melalui Jaringan Telepon
Penggunaan DT-51 Untuk Komunikasi Mikrokontroler Melalui Jaringan Telepon
 
Penggunaan DT-Basic Untuk Membaca Nomor Identitas Secara Wireless
Penggunaan DT-Basic Untuk Membaca Nomor Identitas Secara WirelessPenggunaan DT-Basic Untuk Membaca Nomor Identitas Secara Wireless
Penggunaan DT-Basic Untuk Membaca Nomor Identitas Secara Wireless
 
Interfacing Number Display
Interfacing Number DisplayInterfacing Number Display
Interfacing Number Display
 
Proses dan Penjadualan : Prioritas dan Multiprosesor
Proses dan Penjadualan : Prioritas dan MultiprosesorProses dan Penjadualan : Prioritas dan Multiprosesor
Proses dan Penjadualan : Prioritas dan Multiprosesor
 
Pembuatan Rangkaian Adaptor dengan Keluaran 5V dan 12V
Pembuatan Rangkaian Adaptor dengan Keluaran 5V dan 12VPembuatan Rangkaian Adaptor dengan Keluaran 5V dan 12V
Pembuatan Rangkaian Adaptor dengan Keluaran 5V dan 12V
 
Konsep Pendidikan Tinggi Berbasis E-Learning
Konsep Pendidikan Tinggi Berbasis E-LearningKonsep Pendidikan Tinggi Berbasis E-Learning
Konsep Pendidikan Tinggi Berbasis E-Learning
 
Pengaturan Level Sistem SCPC-FM untuk Memperoleh Performansi yang Baik dalam ...
Pengaturan Level Sistem SCPC-FM untuk Memperoleh Performansi yang Baik dalam ...Pengaturan Level Sistem SCPC-FM untuk Memperoleh Performansi yang Baik dalam ...
Pengaturan Level Sistem SCPC-FM untuk Memperoleh Performansi yang Baik dalam ...
 

Pemrogaman Visual Basic.NET (Modul 4)

  • 1. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Pemrograman Berorientasi Objek pada VB.Net Oleh : Hendra, ST. Buku ini membahas tentang konsep dasar pemrograman berorientasi objek (OOP) dan bagaimana melakukannya pada VB.NET, serta memberikan contoh-contoh keunggulan OOP dibandingkan dengan pendekatan konvensional. Penguasaan terhadap teknik pengembangan berorientasi objek merupakan suatu nilai tambah bagi programmer dewasa ini, karena trend bahasa pemrograman menuju kearah pendekatan OOP, terutama sejak kemunculan Java yang 100% menerapkan OOP. Penulis yakin bagian ini merupakan hal yang tersulit bagi programmer yang ingin melakukan migrasi dari VB6 ke VB.NET, karena OOP merupakan hal yang benar-benar baru. Untuk mempelajari buku ini anda tidak perlu menginstalasi Visual Studio .NET, tetapi anda cukup menginstalasi .Net Framework yang dapat didownload secara gratis dari website Microsoft. Semua contoh dan latihan dibuku ini dapat dikompilasi langsung dari Dos prompt dengan menggunakan kompiler Visual Basic yang langsung tersedia setelah anda menginstalasi .Net Framework. INDOPROG 1
  • 2. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Dasar OOP Visual Basic merupakan bahasa yang Object-Based (komponen-komponen program dibuat dalam bentuk objek), sedangkan VB.NET adalah Object Oriented, hal ini berarti bahwa VB.NET merupakan bahasa yang benar-benar berorientasi object dengan mendukung empat pilar utama dari OOP yaitu Polymorphism, Inheritance, Abstraction dan Encapsulation. Kalau anda adalah programmer yang terbiasa dengan pendekatan procedural terstruktur, maka anda akan baru dengan beberapa istilah OOP yang kita sebutkan diatas, dan memang hal tersebut senantiasa menjadi masalah bagi programmer yang berasal dari VB dan ingin beralih ke VB.NET. Lalu timbul pertanyaan, apakah pada kita harus menguasai dan memahami semua istilah diatas baru dapat membuat program aplikasi dengan VB.NET ? Tentu saja jawabannya tidak, tetapi sebagai programmer VB.NET yang baik, maka konsep dari OOP tidak dapat diabaikan. Mengapa harus pendekatan OOP? Tujuan utama dari pengembangan pendekatan berorientasi objek (OOP) adalah untuk menghilangkan beberapa kelemahan yang terdapat pada pendekatan procedural. Pada OOP data diperlakukan sebagai elemen yang penting dan tidak boleh mengalir secara bebas dalam program. Data yang terikat kepada function dan harus dilindungi terhadap kemungkinan perubahan dari luar function. Catatan : Anda dapat melihat konsep OOP seperti suatu objek Televisi, dimana sebagai pemakai kita tidak perlu terlalu pusing dengan komponen apa saja yang bekerja didalam televise tersebut, tetapi sebagai pemakai kita cukup mengerti bagaimana menghidupkan, memilih channel, mengubah volume suara, dan beberapa setting dasar. OOP memungkinkan untuk pemecahan masalah kedalam sejumlah entitas yang disebut sebagai objek dan kemudian mengembangkan data dan fungsi disekitar objek tersebut. Salah satu manfaat yang terpenting dari OOP adalah pemanfaatan kembali. Beberapa kemampuan utama dari OOP adalah sebagai berikut : • Menekankan pada data dari pada procedure • Program terbagi kedalam objek-objek • Data disembunyikan dari akses oleh function-function eksternal • Objek dapat berkomunikasi satu dengan yang lain melalui function • Data baru dan function dapat dengan mudah ditambahkan pada saat dibutuhkan. • Mengikuti pendekatan buttom up. INDOPROG 2
  • 3. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Konsep dari OOP: • Objects • Classes • Data Abstraction dan Encapsulation • Inheritance • Polymorphism Objek Objek merupakan dasar dari entitas run-time dalam suatu sistem berorientasi objek. Masalah pada pemrograman adalah menganalisa dalam arti objek dan komunikasi alamiah diantara mereka. Ketika suatu program dijalankan, objek berinteraksi satu dengan yang lain dengan saling mengirim message. Objek-objek yang berbeda berinteraksi satu dengan yang lain tanpa mengetahui detail data dari masing-masing data ataupun koding. Class Suatu class adalah suatu koleksi dari objek-objek yang bertipe sama. Setelah suatu class telah didefinisikan, sejumlah dari objek-objek dapat dibuat berdasarkan class tersebut. Catatan : Istilah Class dan Objek sering dicampuradukan, pada objek merupakan instance dari suatu class pada saat runtime, jadi pada saat design, class merupakan cetak biru bagi objek-objek yang akan dibuat pada saat runtime. Anda dapat mengasosiasikan class dengan gambar denah dari rancangan rumah, dan selanjutnya berdasarkan denah ini akan dibangun rumah-rumah (objek) sebenarnya. Data Abstraction dan Encapsulation Abstraction mengacu pada usaha untuk menampilkan hal-hal yang penting tanpa mengikutsertakan detail latarbelakang ataupun penjelasan. Class-class menggunakan konsep dari abstraksi dan mendefinsikannya sebagai suatu daftar dari atribut-atribut abstrak. INDOPROG 3
  • 4. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Catatan : Sebagaimana contoh sebelumnya bahwa TV merupakan gambaran dari Abstraksi, dimana yang perlu ditonjolkan pada pemakai adalah hal-hal penting bagaimana menghidupkan dan mematikan serta berbagai setting dasar, sedangkan permasalahan teknis yang berada didalam kotak TV seperti rangkaian elektronik disembunyikan dari pemakai. Jadi dalam hal ini TV dianggap suatu black box. Menyimpan data dan fungsi-fungsi ke dalam suatu unit tunggal (class) adalah encapsulation. Data tidak dapat diakses oleh dunia luar dan hanya fungsi-fungsi yang mana berada dalam class tersebut dapat mengaksesnya. Inheritance Inheritance adalah proses yang mana objek-objek dapat mengusahakan member dari objek class lain. Pada OOP inheritance menyediakan pemakaian kembali, seperti, menambah kemampuan baru pada class yang telah ada dengan tanpa melakukan modifikasi langsung terhadap class tersebut. Hal ini dilakukan dengan menurunkan suatu class baru dari yang class telah ada. Class baru tersebut memiliki kombinasi dari keduanya. Catatan : Pendekatan inheritance dapat dipahami sebagai pengembangan produk, dimana engineer tidak perlu merancang produk dari awal, tetapi dengan melakukan modifikasi terhadap produk yang telah ada untuk menghasilkan suatu produk baru. Polymorphism Polymorphism adalah kemampuan untuk memiliki lebih dari satu bentuk. Suatu operasi dapat menunjukan prilaku yang berbeda pada instance yang berbeda. Prilaku tersebut tergantung kepada tipe data yang digunakan dalam operasi. Polymorphism secara ekstensif digunakan dalam implementasi Inheritance. Dengan polymorphism kita dapat membuat beberapa fungsi dengan nama yang sama tetapi memiliki daftar argument yang berbeda baik dari segi jumlah maupun tipe datanya (Overloading), sehingga dalam implementasinya fungsi akan dioperasikan berdasarkan argumen yang diberikan, sehingga program dapat bereaksi secara tepat sesuai dengan jenis tipe data dan jumlah argument. Kemudian polymorphism juga memiliki fungsi dimana pemanfaatan variable dengan tipe base class untuk menampung instance dari class turunannya dan menjalankan metoda class turunannya. Keunggulan dari OOP INDOPROG 4
  • 5. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. OOP memiliki keunggulan berikut diatas pendekatan konvensional: • OOP menyediakan struktur modular yang jelas untuk program, yang mana cocok untuk mendefinisikan tipe data abstrak yang merupakan detail dari implementasi disembunyikan serta unit memiliki interface yang telah didefinisikan dengan jelas. • OOP memudahkan maintenance dan modifikasi terhadap kode yang telah sebagai objek baru yang dapat dibuat dengan perubahan yang minimal • OOP menyediakan suatu kerangka kerja yang baik untuk kode library yang mana menyediakan komponen software yang secara mudah dapat disesuaikan dan dimodifikasi oleh programmer. Hal ini khususnya sangat berguna untuk pengembangan user interface secara grafik. Catatan : Setelah anda membaca uraian tersebut diatas, awalnya anda akan merasa kesulitan untuk memahami dan menerapkan beberapa konsep-konsep diatas pada program anda, dan hal tersebut adalah wajar. Untuk mentransformasi gaya pemrograman anda dari pendekatan procedural terstruktur menjadi OOP membutuhkan waktu dan usaha. Sebab pada pendekatan procedural terstruktur focus programmer langsung kepada logika dan koding untuk pencapaian hasil, sedangkan pada OOP kita harus melakukan abstraksi terhadap data dan fungsi yang berkaitan menjadi class, dan selanjutnya class-class tersebut berinteraksi dengan message untuk mencapai tujuan akhir. Untuk membantu pengertian dan menunjukan keunggulan konsep OOP, penulis akan memberikan beberapa contoh keunggulan pemanfaatan OOP pada bagian-bagian selanjutnya. INDOPROG 5
  • 6. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. OOP pada Visual Basic Membuat Class Pemrograman OOP pada Visual Basic dapat dilakukan dengan merancang class dari objek dengan menggunakan struktur class sebagai berikut : Class nama 'member [variable, property, method and event declarations] End Class Contoh : Misalnya kita ingin membuat program animasi bola pantul yang memanfaatkan GDI+ dengan pendekatan berorientasi objek, maka sebagai langkah awal adalah merancang Class untuk bola pantul. Pada tahap rancangan, kita harus dapat mendefinisikan aksi apa saja yang harus dapat dilakukan oleh objek bola pantul yaitu bergerak (move) yang tentu saja memiliki koordinat awal (x,y) yang bergerak kearah tertentu (dx, dy). Dalam pergerakan dilayar, tentu saja dibatasi oleh area tertentu (sx,sy). Kemudian sebagai wujud dari animasi gerakan bola dilayar, kita perlu menyediakan aksi draw dan clear. Adapun rancangan class tersebut diatas dalam bentuk terprogram adalah sebagai berikut : Class Pantul Protected x As Single 'posisi x dilayar Protected y As Single 'posisi y dilayar Private sx As Single 'jumlah kolom x Private sy As Single 'jumlah baris y Private dx As Single 'arah bola terhadap x Private dy As Single 'arah bola terhadap y Public Sub New(f as form) 'constructor sx = f.width 30 'lebar form dibagi 30 sy = f.height 30 'tinggi form dibagi 30 x = rnd*(sx-2) + 2 'posisi awal random y = rnd*(sy-2) + 2 dx = 1 'arah diagonal ke bawah dy = 1 Draw(f) End Sub Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) INDOPROG 6
  • 7. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. End Sub Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah x = x + dx y = y + dy 'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f) End Sub End Class Catatan : Jika anda perhatikan perhatikan rancangan class diatas, maka konsep dari data abstraction akan nampak, dimana sebagai interface keluar hanya terdiri metoda New, Draw, Clear, dan Move, sedangkan pengkodean tersembunyi dari program yang akan memanfaatkan Objek dari Class Pantul Kemudian konsep dari data encapsulation, dimana variable x,y,sx,sy,dx, dan dy disatukan beserta fungsi New, Draw, Clear, dan Move didalam satu Class Pantul. Ruang Lingkup member pada suatu class Pada saat pendeklarasian member pada class anda dapat menggunakan keyword seperti Friend, Private, Protected, Protected Friend, dan Public, dimana masing-masing memiliki kendali akses yang berbeda. Friend, member hanya tersedia bagi kode pada lingkup project yang sama. Private, member hanya tersedia bagi class itu sendiri Protected, member tersedia bagi class dan class turunannya. Protected Friend, member tersedua bagi kode pada lingkup project yang sama, dan class turunannya. Public, member tersedia bagi semua kode program. Jika anda tidak menentukan jenis kendali akses bagai suatu member, maka defaultnya adalah Public. INDOPROG 7
  • 8. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Constructors Suatu constructor adalah anggota function yang mana memiliki tugas untuk menginisialisasi objek dari classnya. Suatu constructor akan dijalankan ketika objek dari class tersebut diciptakan. Kita dapat mengirim data kepada konstruktor dengan mencantumkannya didalam kurung. Pada Visual Basic suatu konstruktor harus dibuat dengan suatu Sub procedure dengan nama New pada class. Koding berikut mendemonstrasikan pemakaian dari konstruktor di Visual Basic. Public Sub New(f as form) 'constructor sx = f.width 30 'lebar form dibagi 30 sy = f.height 30 'tinggi form dibagi 30 x = rnd*(sx-2) + 2 'posisi awal random y = rnd*(sy-2) + 2 dx = 1 'arah diagonal ke bawah dy = 1 Draw(f) End Sub Pada contoh diatas, konstruktor digunakan untuk menginisialisasi nilai awal untuk variable pada Objek seperti sx, sy, x, y, dx, dan dy. Untuk konstruktor diatas, pada saat kita membuat instance dari Class dengan Dim Bola As Pantul Bola = New Pantul(Me) Dimana Me mengacu pada form yang sedang aktif. Destructors Destructors akan dijalankan ketika suatu objek dimusnahkan. Didalam suatu destructor kita dapat menempatkan koding untuk membersihkan objek setelah digunakan. Kita menggunakan metode Finalize di Visual Basic untuk membuat destructor yang otomatis akan dijalankan ketika runtime .NET menemukan bahwa objek tidak dibutuhkan lagi. Contoh implementasi pemakaian destructor adalah misalnya pada konstruktor kita membuka data maupun file, sehingga pada saat destructor kita perlu menutup data maupun file yang terbuka. Catatan: Setiap objek didunia nyata memiliki fase awal yaitu kelahiran, dan fase akhir yaitu kematian. Pada saat suatu objek dilahirkan tentu saja telah memiliki nilai property bawaan, seperti seorang bayi yang baru dilahirkan telah memiliki jenis kelamin, berat badan, dan tinggi. Demikian juga objek dalam konsep OOP, yang kadang-kadang membutuhkan pemberian nilai awal kepada beberapa property begitu instance dari class dibuat. Tindakan pemberian nilai awal (inisialisasi) ini dapat dilakukan dengan menggunakan metoda INDOPROG 8
  • 9. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. khusus yang dikenal sebagai Constructor. Contoh Keunggulan OOP (Bagian 1) Jika sekilas kita melihat uraian yang telah disebutkan diatas seakan-akan segala sesuatu yang dilakukan dengan pendekatan OOP dapat juga dilakukan dengan teknik pemrograman biasanya. Tetapi misalnya anda bayangkan kita ingin membuat program bola pantul yang terdiri dari 15 buah bola pantul dilayar yang masing-masing bergerak tanpa pendekatan OOP. Berikut ini saya akan membuat contoh dengan pendekatan OOP, dan anda bandingkan sendiri. Pertama kita akan membuat variable array untuk bola pantul sebagai array 15 elemen : Dim Bola(14) As Pantul Kemudian kita buat instance dari Class Pantul For I As Integer = 0 To 14 Bola(I) = New Pantul(Me) Next I Selanjutnya kita gerakan masing-masing objek dengan looping : For I As Integer = 0 To 14 Bola.Move(Me) Next I Dari hal ini jelaslah bahwa dengan pendekatan OOP kita tidak melakukan perubahan terhadap rancangan Class Pantul sama sekali, melainkan kita membuat 15 instance dari Class Pantul. Listing lengkap dari program 15 ola pantul dengan pendekatan OOP. Option Explicit On Imports Sistem Imports Sistem.Windows.Forms Imports Microsoft.VisualBasic Public Class MyForm : Inherits Form Dim WithEvents MyTimer as New Timer Dim Bola(14) As Pantul <Sistem.STAThread()> _ Public Shared Sub Main() Application.Run(New MyForm) End Sub Public Sub New() 'Constructor Me.BackColor = Sistem.Drawing.Color.Black Me.FormBorderStyle = FormBorderStyle.None INDOPROG 9
  • 10. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Me.Width = Screen.PrimaryScreen.Bounds.Width Me.Height = Screen.PrimaryScreen.Bounds.Height For I As Integer = 0 to 14 Bola(I) = New Pantul(Me) Next I MyTimer.Interval = 150 '150 millidetik MyTimer.Enabled = True End Sub 'Mengerakan objek dengan event tick pada objek MyTimer Private Sub MyTimer_Tick(sender as object, e as eventargs) _ handles MyTimer.Tick For I As Integer = 0 to 14 Bola(I).Move(Me) Next I End Sub End Class Class Pantul Protected x As Single 'posisi x dilayar Protected y As Single 'posisi y dilayar Private sx As Single 'jumlah kolom x Private sy As Single 'jumlah baris y Private dx As Single 'arah bola terhadap x Private dy As Single 'arah bola terhadap y Public Sub New(f as form) 'constructor sx = f.width 30 'lebar form dibagi 30 sy = f.height 30 'tinggi form dibagi 30 x = rnd*(sx-2) + 2 'posisi awal random y = rnd*(sy-2) + 2 dx = 1 'arah diagonal ke bawah dy = 1 Draw(f) End Sub Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah x = x + dx y = y + dy INDOPROG 10
  • 11. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. 'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f) End Sub End Class INDOPROG 11
  • 12. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Inheritance Pemanfaatan Kembali Kunci dari kemampuan OOP adalah pemakaian kembali. Yang secara nyata akan menghemat waktu jika kita dapat memanfaatkan kembali pada yang pernah kita buat. Pemakaian kembali akan menurunkan pekerjaan untuk testing dan debugging terhadap bagian yang digunakan kembali, karena telah dilakukan sebelumnya. Proses inheritance dilakukan dengan menurunkan suatu class baru dari class yang telah ada. Class yang lama disebut sebagai base class dan class yang baru disebut derived class. Class turunan akan mewarikan semua atau sebagian dari segala sesuatu yang terdapat pada base class. Pada Visual Basic kita menggunakan keyword Inherits untuk menurunkan suatu class: Misalnya kita telah memiliki Class Pantul Class Pantul member End Class Selanjutnya misalnya kita ingin mengembangkan Class baru dengan menurunkannya dari Class Pantu Class Pantul1 : Inherits Pantul member End Class Maka Class Pantul1 akan mewarisi semua member Pantul yang dideklarasikan sebagai Protected maupun Public. Overriding Pada derived class kadang-kadang kita perlu mendefinisikan ulang fungsi maupun sub yang ada pada base class, dalam hal inilah istilash Overriding muncul, dimana kita dapat mendefinisikan ulang fungsi maupun sub pada derived class. Misalnya pada Class Pantul1 gambar yang ingin kita hasilkan adalah persegi, maka kita perlu melakukan Overiding terhadap Sub Draw dan Clear yang ada pada base class. Catatan : Sub maupun Function pada base class harus dideklarasikan sebagai Overridable baru dapat di Overrides pada derived class. Pada Class pantul kita perlu mencantumkan keyword Overridable Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) INDOPROG 12
  • 13. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. End Sub Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Selanjutnya pada class turunannya kita dapat melakukan Overriding terhadap metoda yang dimaksud : Class Pantul1 : Inherits Pantul Public Sub New(f as form) 'constructor MyBase.New(f) End Sub Overrides Public Sub Draw(f as form) 'metoda 'gambar persegi ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30) End Sub Overrides Public Sub Clear(f as form) 'metoda 'gambar persegi ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30) End Sub End Class Shadowing Jika pada Overriding kita membutuhkan permisi dari base class untuk melakukan overriding dengan keyword Overridable, selain itu kita juga dapat melakukan Shadowing terhadap metoda pada base class yang tidak memberikan permisi Overridable. Contoh : Pada base class : Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub Pada class turunannya : INDOPROG 13
  • 14. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Public Shadows Sub Draw(f as form) 'metoda 'gambar persegi ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30) End Sub Catatan : Pemakaian cara Shadowing menyebabkan konsep polymorphism tidak dapat berfungsi sebagaimana pada cara Overriding. OOP pada Pemrograman Form Untuk pemrograman program Windows yang berbasis form, .NET telah menyediakan class Form yang terdefinisi pada namespace Sistem.Windows.Forms, kemudian didalam pemakaiannya kita dapat melakukan inheritance dari class form ke program kita dengan menbuat class baru : Public Class MyForm : Inherits Form Selanjutnya kita dapat membuat konstruktor (sub New) untuk menginisialisasi keadaan awal dari form kita (misalnya mengatur warna, ukuran, menambah control timer dll) Public Sub New() 'Constructor Me.BackColor = Sistem.Drawing.Color.Black Me.FormBorderStyle = FormBorderStyle.None Me.Width = Screen.PrimaryScreen.Bounds.Width Me.Height = Screen.PrimaryScreen.Bounds.Height For I As Integer = 0 to 14 Bola(I) = New Pantul(Me) Next I MyTimer.Interval = 150 '150 millidetik MyTimer.Enabled = True End Sub Pada class MyForm kita dapat juga melakukan overriding terhadap metoda yang telah terdefinisi pada class Form, misalnya untuk metoda paint. Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyBase.OnPaint(e) e.Graphics.DrawLine(MyPen,10,10,200,100) End Sub Contoh Keunggulan OOP (Bagian 2) Misalnya kita akan membuat program yang terdiri dari 2 objek pantul yang satu berbentuk bola dan satu berbentuk persegi. INDOPROG 14
  • 15. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Pada pendekatan OOP, misalnya kita telah memiliki class Pantul yang menampilkan bentuk lingkaran, selanjutnya adalah membuat class Pantul1 yang akan menampilkan bentuk persegi, tetapi kita tidak perlu merancang class Pantul1 dari awal melainkan cukup menurunkannya dari class Pantul dengan melakukan override terhadap metoda draw dan clear. Jadi dalam hal ini kita tidak perlu merancang class dari awal, tetapi cukup memperbaharui maupun mengembangkan class yang telah ada, sehingga waktu pemrograman dapat dipersingkat dan proses debug dapat dikurangi. Listing program menampilkan bola dan persegi pantul dilayar : Option Explicit On Imports Sistem Imports Sistem.Windows.Forms Imports Microsoft.VisualBasic Public Class MyForm : Inherits Form Dim WithEvents MyTimer as New Timer Dim Bola As Pantul Dim Persegi As Pantul1 <Sistem.STAThread()> _ Public Shared Sub Main() Application.Run(New MyForm) End Sub Public Sub New() 'Constructor Me.BackColor = Sistem.Drawing.Color.Black Me.FormBorderStyle = FormBorderStyle.None Me.Width = Screen.PrimaryScreen.Bounds.Width Me.Height = Screen.PrimaryScreen.Bounds.Height Bola = New Pantul(Me) Persegi = New Pantul1(Me) MyTimer.Interval = 150 MyTimer.Enabled = True End Sub Private Sub MyTimer_Tock(sender as object, e as eventargs) _ handles MyTimer.Tick Bola.Move(Me) Persegi.Move(Me) End Sub End Class Class Pantul Protected x As Single 'posisi x dilayar Protected y As Single 'posisi y dilayar Private sx As Single 'jumlah kolom x Private sy As Single 'jumlah baris y INDOPROG 15
  • 16. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Private dx As Single 'arah bola terhadap x Private dy As Single 'arah bola terhadap y Public Sub New(f as form) 'constructor sx = f.width 30 'lebar form dibagi 30 sy = f.height 30 'tinggi form dibagi 30 x = rnd*(sx-2) + 2 'posisi awal random y = rnd*(sy-2) + 2 dx = 1 'arah diagonal ke bawah dy = 1 Draw(f) End Sub Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah x = x + dx y = y + dy 'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f) End Sub End Class Class Pantul1 : Inherits Pantul Public Sub New(f as form) 'constructor MyBase.New(f) 'menjalankan constructor base class End Sub Overrides Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30) End Sub Overrides Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics INDOPROG 16
  • 17. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30) End Sub End Class INDOPROG 17
  • 18. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Polymorphism Polymorphism merupakan salah satu fasilitas yang krusial pada OOP, yang memiliki arti "satu nama, banyak bentuk". Hal ini disebut juga sebagai Overloading yang berarti menggunakan hal yang sama untuk tujuan yang berbeda. Dengan menggunakan Polymorphism kita dapat membuat banyak fungsi dengan nama yang sama tetapi memiliki daftar argument yang berbeda. Fungsi tersebut dijalankan berdasarkan daftar argument yang digunakan untuk menjalankan fungsi. Misalnya kita memperbaharui class Pantul dimana pada konstruktor kita dapat menentukan warna dari lingkaran. Class Pantul Protected x As Single 'posisi x dilayar Protected y As Single 'posisi y dilayar Private sx As Single 'jumlah kolom x Private sy As Single 'jumlah baris y Private dx As Single 'arah bola terhadap x Private dy As Single 'arah bola terhadap y Private clr As Sistem.Drawing.Color Public Sub New(f as form) 'constructor me.New(f,Sistem.Drawing.Color.Red) End Sub Public Sub New(f as form, w as sistem.drawing.color) 'constructor sx = f.width 30 'lebar form dibagi 30 sy = f.height 30 'tinggi form dibagi 30 x = rnd*(sx-2) + 2 'posisi awal random y = rnd*(sy-2) + 2 dx = 1 'arah diagonal ke bawah dy = 1 clr = w Draw(f) End Sub Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Clr,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah INDOPROG 18
  • 19. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. x = x + dx y = y + dy 'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f) End Sub End Class Dalam hal ini class pantul memiliki dua konstruktor yang masing-masing memiliki daftar argument yang berbeda yaitu : Public Sub New(f as form) 'constructor Dan Public Sub New(f as form, w as sistem.drawing.color) Sehingga ketika kita membuat instance dari Class Pantul dapat dilakukan dengan : Bola = New Pantul(Me) Ataupun : Bola = New Pantul(Me, Sistem.Drawing.Color.Blue) Polymorphism juga dapat berupa pemanfaatan variable yang bertype base class untuk mengimplementasikan metoda pada class-class turunannya. Misalnya kita mendeklarasikan variable array bola yang terdiri dari dua elemen Dim Bola(1) As Pantul Bola(0) = New Pantul(Me) Bola(1) = New Pantul1(Me) Dimana variable Bola(n) sebenarnya merupakan variable type Pantul, tetapi dalam pemakaiannya kita gunakan untuk instance Pantul1, selanjutnya : Bola(0).Move(Me) Bola(1).Move(Me) Akan menjalankan metoda Move dari Class yang bersesuaian dengan instance objek yang dibuat. Contoh Keunggulan OOP (Bagian 3) Misalnya kita ingin membuat program animasi bola pantul di layar yang memberi kebebasan kepada pemakai untuk menentukan jumlah objek masing-masing bentuk dilayar : INDOPROG 19
  • 20. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Dim JlhBola As Integer = Val(Inputbox("Jumlah Bola")) Dim JlhPersegi As Integer = Val(Inputbox("Jumlah Persegi")) Selanjutnya kita membuat instance dari masing-masing class sesuai dengan jumlah yang ditentukan : Dim Bola(14) As Pantul Dim Jlh As Integer Dim I As Integer = 0 Do While I < JlhBola Bola(I) = new Pantul(Me) I+=1 Loop Do While I < JlhBola+JlhPersegi Bola(I) = new Pantul1(Me) I+=1 Loop Jlh = JlhBola+JlhPersegi Dalam hal ini kita mendeklarasikan variable array Bola yang bertipe Pantul, padahal dalam pemakaiannya kita gunakan juga untuk menampung instance untuk class Pantul1. Kemudian untuk mengerakan objek kita gunakan looping : For I As Integer = 0 To Jlh-1 Bola(I).Move(Me) INDOPROG 20
  • 21. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Next I Selanjutnya metoda move yang dijalankan sangat tergantung pada jenis instance dari variable objek. Dapatkah anda bayangkan bagaimana kalau tanpa menggunakan Polymorphism ? Listing program menampilkan bola dan persegi pantul dilayar sesuai dengan jumlah yang diinginkan pemakai : Option Explicit On Imports Sistem Imports Sistem.Windows.Forms Imports Microsoft.VisualBasic Public Class MyForm : Inherits Form Dim WithEvents MyTimer as New Timer Dim Bola(14) As Pantul Dim Jlh As Integer <Sistem.STAThread()> _ Public Shared Sub Main() Application.Run(New MyForm) End Sub Public Sub New() 'Constructor Me.BackColor = Sistem.Drawing.Color.Black Me.FormBorderStyle = FormBorderStyle.None Me.Width = Screen.PrimaryScreen.Bounds.Width Me.Height = Screen.PrimaryScreen.Bounds.Height Dim JlhBola As Integer = Val(Inputbox("Jumlah Bola")) Dim JlhPersegi As Integer = Val(Inputbox("Jumlah Persegi")) Dim I As Integer = 0 Do While I < JlhBola Bola(I) = new Pantul(Me) I+=1 Loop Do While I < JlhBola+JlhPersegi Bola(I) = new Pantul1(Me) I+=1 Loop Jlh = JlhBola+JlhPersegi MyTimer.Interval = 150 MyTimer.Enabled = True End Sub Private Sub MyTimer_Tock(sender as object, e as eventargs) _ handles MyTimer.Tick For I As Integer = 0 To Jlh-1 INDOPROG 21
  • 22. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Bola(I).Move(Me) Next I End Sub End Class Class Pantul Protected x As Single 'posisi x dilayar Protected y As Single 'posisi y dilayar Private sx As Single 'jumlah kolom x Private sy As Single 'jumlah baris y Private dx As Single 'arah bola terhadap x Private dy As Single 'arah bola terhadap y Private clr As Sistem.Drawing.Color Public Sub New(f as form) 'constructor me.New(f,Sistem.Drawing.Color.Red) End Sub Public Sub New(f as form, w as sistem.drawing.color) 'constructor sx = f.width 30 'lebar form dibagi 30 sy = f.height 30 'tinggi form dibagi 30 x = rnd*(sx-2) + 2 'posisi awal random y = rnd*(sy-2) + 2 dx = 1 'arah diagonal ke bawah dy = 1 clr = w Draw(f) End Sub Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Clr,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah x = x + dx y = y + dy 'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f) INDOPROG 22
  • 23. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. End Sub End Class Class Pantul1 : Inherits Pantul Public Sub New(f as form) 'constructor MyBase.New(f) End Sub Overrides Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30) End Sub Overrides Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30) End Sub End Class Catatan : Konsep Polymorphism tidak berlaku untuk metoda Shadowing. INDOPROG 23
  • 24. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Interfaces Interfaces memungkinkan kita untuk membuat definisi untuk interaksi komponen. Interface juga menyediakan cara lain untuk mengimplementasikan polymorphism. Melalui interface, kita dapat menentukan metoda yang mana suatu komponen harus miliki tanpa menentukan bagaimana metoda tersebut diimplementasikan (koding detail untuk metoda tersebut). Jadi dalam hal ini interface menyerupai prototype bagi class lain yang akan dikembangkan. Anda bisa membayangkan interface sebagai suatu standard pengembangan berbagai fasilitas dalam objek yang dibakukan, jika class mendukung standard interface tersebut, maka wajib memenuhi tata cara penulisan yang telah didefinisikan dalam interface. Misalnya kita membuka pusat layanan pelanggan dimana semua pelayan diwajibkan melakukan sapaan pembukan kepada para tamu yang dating berkunjung, dan kata pembuka sapaan telah distandarisasi untuk pagi, sore, dan malam. Public Interface Sapaan Sub Pagi() Sub Sore() Sub Malam() End Interface Kita menggunakan keyword Interface untuk membuat suatu interface dan keyword implements untuk mengimplementasikan interface tersebut. Selanjutnya sapaan akan disampaikan dalam dua bahasa sesuai dengan asal pengunjung, sehingga kita dapat memgembangkan class dengan mengimplementasikan interface sapaan yang telah dibuat : Public Class Indonesia : Implements Sapaan Sub Pagi() Implements Sapaan.Pagi Console.WriteLine("Selamat Pagi") End Sub Sub Sore() Implements Sapaan.Sore Console.WriteLine("Selamat Sore") End Sub Sub Malam() Implements Sapaan.Malam Console.WriteLine("Selamat Malam") End Sub End Class Public Class English : Implements Sapaan Sub Pagi() Implements Sapaan.Pagi Console.WriteLine("Good Morning") End Sub Sub Sore() Implements Sapaan.Sore INDOPROG 24
  • 25. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Console.WriteLine("Good Afternoon") End Sub Sub Malam() Implements Sapaan.Malam Console.WriteLine("Good Evening") End Sub End Class Dan listing konkret untuk contoh pemakaian interface : Option Explicit On Imports Sistem Public Module MyModule Sub Main() Dim Domestik As New Indonesia Dim Internasional As New English Domestik.Pagi() Internasional.Pagi() End Sub Public Interface Sapaan Sub Pagi() Sub Sore() Sub Malam() End Interface Public Class Indonesia : Implements Sapaan Sub Pagi() Implements Sapaan.Pagi Console.WriteLine("Selamat Pagi") End Sub Sub Sore() Implements Sapaan.Sore Console.WriteLine("Selamat Sore") End Sub Sub Malam() Implements Sapaan.Malam Console.WriteLine("Selamat Malam") End Sub End Class Public Class English : Implements Sapaan Sub Pagi() Implements Sapaan.Pagi Console.WriteLine("Good Morning") End Sub Sub Sore() Implements Sapaan.Sore Console.WriteLine("Good Afternoon") End Sub Sub Malam() Implements Sapaan.Malam Console.WriteLine("Good Evening") End Sub INDOPROG 25
  • 26. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. End Class End Module Dan kalau dijalankan akan menghasilkan tampilan berikut INDOPROG 26
  • 27. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Abstract Classes Suatu class abstrak tidak dapat digunakan untuk membuat objek. Suatu class abstrak dirancang untuk berlaku sebagai suatu base class (untuk diwariskan ke class lain). Suatu abstrak class digunakan sebagai konsep design yang menjadi acuan pengembangan bagi class-class yang akan dikembangkan. Class abstrak menyerupai interface. Setelah suatu class abstrak dideklarasikan, dia tidak dapat di buat objek instancenya, melainkan harus diturunkan. Membuat class Abstrak Pada Visual Basic .NET kita dapat membuat abstrak class dengan menggunakan keyword MustInherit. MustInherit Public Class Sapaan MustOverride Sub Pagi() MustOverride Sub Sore() MustOverride Sub Malam() End Class Kemudian pada contoh diatas pada masing-masing metoda sapaan kita menambahkan keyword MustOverride bahwa metoda Pagi, Sore, dan Malam harus di override pada class turunannya. Option Explicit On Imports Sistem Public Module MyModule Sub Main() Dim Domestik As New Indonesia Dim Internasional As New English Domestik.Pagi() Internasional.Pagi() End Sub MustInherit Public Class Sapaan MustOverride Sub Pagi() MustOverride Sub Sore() MustOverride Sub Malam() End Class Public Class Indonesia : Inherits Sapaan Overrides Sub Pagi() Console.WriteLine("Selamat Pagi") End Sub Overrides Sub Sore() Console.WriteLine("Selamat Sore") End Sub Overrides Sub Malam() INDOPROG 27
  • 28. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Console.WriteLine("Selamat Malam") End Sub End Class Public Class English : Inherits Sapaan Overrides Sub Pagi() Console.WriteLine("Good Morning") End Sub Overrides Sub Sore() Console.WriteLine("Good Afternoon") End Sub Overrides Sub Malam() Console.WriteLine("Good Evening") End Sub End Class End Module INDOPROG 28
  • 29. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Program Tetris Oleh : Hendra Soewarno Contoh aplikasi pemrograman GDI+ untuk pembuatan games tetris dengan pendekatan berorientasi objek. Untuk memahami program ini anda perlu mengerti pemrograman form, event handling, dan array, serta GDI+ INDOPROG 29
  • 30. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Rancangan program Program ini menggunakan pendekatan berorientasi objek dengan membuat dua class untuk objek Shape dan objek Grid Class TShape Class ini berfungsi menghasilkan bentuk-bentuk dengan sistem koordinat berikut : {1,0},{1,1},{1,2},{1,3} Dan rotasi ke kanan akan menjadi {0,1},{1,1},{2,1},{3,1} Berikut ini adalah rincian array untuk masing-masing Shape dan rotasinya {1,0},{1,1},{1,2},{1,3} {0,1},{1,1},{2,1},{3,1} {1,0},{1,1},{1,2},{1,3} {0,1},{1,1},{2,1},{3,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{0,2},{1,2} {0,0},{0,1},{1,0},{2,0} {0,0},{1,0},{1,1},{1,2} {0,1},{1,1},{2,0},{2,1} {0,0},{0,1},{0,2},{1,1} {0,0},{1,0},{1,1},{2,0} {1,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,1} {0,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,0} {0,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,0} INDOPROG 30
  • 31. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. {0,1},{0,2},{1,0},{1,1} {0,0},{1,0},{1,1},{2,1} {0,1},{0,2},{1,0},{1,1} {0,0},{1,0},{1,1},{2,1} Contoh : Yang memiliki rincian array sebagai berikut : {0,0},{0,1},{0,2},{1,1} {0,0},{1,0},{1,1},{2,0} {1,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,1} Yang selanjutnya dipetakan menjadi suatu array 4 dimensi yang berisi koordinat dari masing- masing shape : 'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta bentuk rotasinya private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}, _ {{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}}, _ {{{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}}, _ {{{0,0},{0,1},{0,2},{1,2}}, _ {{0,0},{0,1},{1,0},{2,0}}, _ {{0,0},{1,0},{1,1},{1,2}}, _ {{0,1},{1,1},{2,0},{2,1}}}, _ {{{0,0},{0,1},{0,2},{1,1}}, _ {{0,0},{1,0},{1,1},{2,0}}, _ {{1,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,1}}}, _ {{{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}, _ {{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}}, _ {{{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}, _ {{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}}} Variabel pada Class TShape private currentshape as integer 'menyimpan nomor current shape private nextshape as integer 'menyimpan nomor next shape INDOPROG 31
  • 32. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. public currentcolor as color 'menyimpan warna current shape public nextcolor as color 'menyimpan warna next shape private currentstate as integer 'nomor rotasi shape Konstruktor TShape Konstuktor TShape merupakan metoda yang otomatis dijalankan begitu instance dari TShape terbentuk. Misalnya : private gtshape as new tshape 'instance class tshape berfungsi menghasilkan bentuk Shape berikutnya yang akan dimunculkan setelah bentuk sekarang dengan memanggil metoda generateshape. 'konstrutor untuk class tshape public sub new() generateshape(nextshape, nextcolor) end sub Metoda GenerateNextShape Metoda ini berfungsi memindahkan nextshape menjadi currentshape, serta membuat nextshape yang berikutnya. 'Membuat next shape berikutnya, dan menset current shape public sub generatenextshape() currentshape = nextshape currentcolor = nextcolor currentstate = 0 'rotasi ke 0 generateshape(nextshape, nextcolor) 'buat nextshape baru end sub Sub GenerateShape Berfungsi menghasilkan shape secara random, dan warnanya 'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor private sub generateshape(byref shape as integer, _ byref shapecolor as color) dim c as integer shape = int(rnd*6) 'random untuk shape c = int(rnd*8) 'random untuk shape color select case c case 0 : shapecolor = color.red case 1 : shapecolor = color.green case 2 : shapecolor = color.blue case 3 : shapecolor = color.orange case 4 : shapecolor = color.pink case 5 : shapecolor = color.cyan INDOPROG 32
  • 33. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. case 6 : shapecolor = color.gray case else shapecolor = color.magenta end select end sub Catatan : Parameter pada sub ini dilewatkan secara by refrence, sehingga nilai dapat dikembalikan ke variable shape dan shapecolor. Metoda Rotate Metode ini berfungsi menset nilai currentstate ke nilai rotasi berikutnya (0 ke 1, 1 ke 2, 2 ke 3, 3 ke 0). 'Rotasi ke bentuk berikutnya public sub rotate() currentstate = currentstate + 1 'Rotasi berikutnya if currentstate = 4 then currentstate = 0 'Kembali ke bentuk awal end sub Metoda DeRotate Metode ini berfungsi menset nilai currentstate ke nilai rotasi sebelumnya (1 ke 0, 2 ke 1, 3 ke 2, 0 ke 3). 'Rotasi ke bentuk sebelumnya public sub derotate() currentstate = currentstate - 1 'Rotasi sebelumnya if currentstate = -1 then currentstate = 3 end sub Metoda CurrentShapeSel Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada array 4 dimensi sarr. 'Mengembalikan sel i,j dari current shape public function currentshapesel(i as integer, j as integer) return sarr(currentshape,currentstate,i,j) end function Nilai sel yang dikembalikan sangat tergantung pada nilai variable currentshape (bentuk shape), dan currentstate (nomor rotasi) INDOPROG 33
  • 34. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Misalnya nilai currentshape = 4, dan nilai currentstate = 3 {1,0},{0,1},{1,1},{1,2} Dan CurrentShapeSel(0,0) akan menghasilkan 1 CurrentShapeSel(0,1) akan menghasilkan 0 Property NextShapeSel Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada array 4 dimensi sarr. 'Mengembalikan sel i,j dari next shape public function nextshapesel(i as integer, j as integer) return sarr(nextshape,0,i,j) 'Bentuk awal end function Nilai sel yang dikembalikan sangat tergantung pada nilai variable nextshape (bentuk shape), dan currentstate defaultnya 0, karena nextshape belum mengalami rotasi. Class TGrid Class ini berfungsi menyediakan mekanisme Grid pada permainan Tetris, dimana pada memori computer diwakili dengan array dua dimensi, dengan gambaran sebagai berikut : INDOPROG 34
  • 35. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Variabel yang digunakan public parr(15,25) as integer 'Array menyimpan isi sel pada grid public carr(15,25) as color 'Array menyimpan warna sel pada grid Merupakan array yang mewakili grid dilayar, jika suatu sel terisi gambar, maka nilai parr(x,y) akan berisi nilai 1, dan carr(x,y) akan berisi nilai warna gambar. Kontruktor TGrid Begitu instance dari TGrid terbuat, maka akan mengisi awal array parr menjadi sebagai berikut, yang akan menjadi bingkai dari grid, sehingga area permainan mulai dari (3,0) s/d (12,22) INDOPROG 35
  • 36. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. 'konstruktur class tgrid public sub new() dim i, j as integer for i = 0 to 15 for j = 0 to 25 parr(i,j) = 1 'isi bingkai next j next i for i = 3 to 12 for j = 0 to 22 parr(i,j) = 0 'isi arena next j next i end sub Metoda TestShape Metoda ini berfungsi mengisi nilai dari shape ke posisi x,y dalam grid, dengan syarat parr(x,y) masih 0 'Menempatkan shape pada posisi x,y di grid public sub putshape(x as integer, y as integer, s as tshape) dim i as integer for i = 0 to 3 INDOPROG 36
  • 37. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = 1 carr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = s.currentcolor next i end sub Misalnya putshape yang ke 4, keposisi 6,21 pada grid, yang akan mengisi nilai ke parr Metoda TestShape Metoda ini berfungsi mencoba apakah shape dapat ditempatkan pada posisi x,y dalam grid, dengan syarat parr(x,y) masih 0 'Mengembalikan nilai yang menunjukan apakah 'shape dapat ditempatkan pada grid diposisi x,y public function testshape(x as integer, y as integer, s as tshape)_ as boolean dim i as integer for i = 0 to 3 'apakah sel pada grid telah terisi ( > 0 ) if parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) > 0 then return false end if INDOPROG 37
  • 38. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. next i return true end function Metoda CheckGrid Metoda ini berfungsi memeriksa apakah ada baris dalam array parr yang berisi nilai 1 dari kolom 3 s/d 12. 'periksa apakah ada baris yang berhasil diselesaikan pemain public function checkgrid() as integer dim i,j as integer dim b,k as integer dim complete as integer complete = 0 i = 22 do while i > 3 j = 3 do while parr(j,i) <> 0 and j < 13 j=j+1 loop if j = 13 then beep 'sound beep complete = complete + 1 for b = i to 4 step -1 for k = 3 to 12 parr(k,b) = parr(k,b-1) carr(k,b) = carr(k,b-1) next k next b else i = i - 1 end if loop return complete end function end class Misalnya array parr pada baris 22 berisi nilai 1 mulai baris 3 s/d 12, maka setelah metoda ChekGrid dijalankan akan menghapus baris 22 dan mengeser baris diatasnya ke bawah, dan mengembalikan nilai berapa baris yang berhasil diselesaikan. INDOPROG 38
  • 39. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Class Tetris Class ini merupakan class utama permainan Tetris Variabel yang digunakan private withevents gtimer as new sistem.windows.forms.timer private labelscore as new label private labelgameover as new label private gtgrid as new tgrid 'instance class tgrid private gtshape as new tshape 'instance class tshape private g as graphics private x,y as integer 'posisi x,y shape pada grid private score as integer 'score permainan Konstruktor Tetris Berfungsi mempersiapkan tampilan form, seperti title form, ukuran form, menempatkan label untuk keterangan score dan gameover, membuat objek Graphics yang akan digunakan untuk menyediakan metoda pengambaran, serta mempersiapkan Shape berikutnya. public sub new() me.text = "Program Tetris" me.size = new size(450, 600) labelscore.location = new point(61,30) me.controls.add(labelscore) labelgameover.location = new point(200,30) me.controls.add(labelgameover) g = me.creategraphics() score = 0 printscore() nextshape() 'persiapkan shape berikutnya end sub Metoda NextShape Metoda ini berfungsi mempersiapkan shape berikutnya, dan menset interval timer 200 millidetik, dan posisi awal shape mulai di posisi (7,0) 'metoda mempersiapkan shape berikutnya private sub nextshape() gtimer.interval = 200 'set interval 200 millidetik INDOPROG 39
  • 40. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. gtimer.enabled = true 'mengaktifkan timer gtshape.generatenextshape() redrawnextshape() 'cetak shape berikutnya x = 7 'koordinat awal di 7,0 y = 0 end sub Metoda MoveShape Metoda ini berfungsi menggambarkan animasi pergerakan Shape pada posisi x,y sesuai dengan arah gerakan yang ditentukan pada dx dan dy, misalnya bergerak ke kiri, kama dx = -1, dy = 0 'memindahkan shape keposisi x,y private sub movexy(dx,dy) clearshape() 'hapus gambar sebelumnya x = x + dx 'ubah posisi x,y y = y + dy drawshape() 'gambar diposisi baru end sub Metoda MoveShape Metoda ini berfungsi memperbaharui nilai score di layar 'metoda untuk mencetak score dilayar private sub printscore() labelscore.text = "Score : " & score.tostring() end sub Metoda MoveShape Metoda ini berfungsi mengubah tulisan di labelgameover menjadi “Game Over” 'metoda untuk mencetak gameover private sub printgameover() labelgameover.text = "Game Over" end sub Event Tick Event ini secara otomatis akan dibangkitkan oleh Timer secara berkala untuk mengerakan Shape ke bawah, dengan senantiasa apakah Shape telah mencapai batas gerakan, jika ya, maka akan memanggil metoda putshape pada TGrid. Jika Shape tertahan dibaris < 3 artinya Game Over 'mengerakan shape ke bawah dengan interval waktu tertentu private sub gtimer_tick(sender as object, e as eventargs) _ handles gtimer.tick 'apakah shape masih bisa turun kebawah if gtgrid.testshape(x,y+1,gtshape) then INDOPROG 40
  • 41. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. movexy(0,1) 'jika ya pindah shape 1 baris ke bawah else gtgrid.putshape(x,y,gtshape) 'tempatkan shape kegrid score = score + gtgrid.checkgrid() 'periksa baris yang lengkap redrawgrid() 'cetak ulang grid printscore() 'cetak score 'jika shape tertahan di baris 3, artinya game over if y < 3 then gtimer.enabled = false 'matikan timer karena gameover printgameover() 'tampil pesan gameover else nextshape() 'persiapkan gambar berikutnya end if end if end sub Event KeyDown Event ini secara otomatis akan dibangkitkan apabila adanya penekanan tombol oleh pemakai, Jika panah atas akan merotasi shape jika panah kiri akan mengerakan shape ke kiri jika panah kanan akan mengerakan shape ke kanan jika panah bawah akan mempercepat turunya shape 'deteksi penekanan tombol dengan event keydown pada form private sub tetris_keydown(sender as object, e as keyeventargs) _ handles mybase.keydown select case e.keyvalue case 38, 104, 12,101 : 'Panah atas, 8, 5 gtshape.rotate() 'rotasi 'apakah hasil rotasi dapat ditempatkan diposisi x,y if gtgrid.testshape(x,y,gtshape) then 'kalau ya, rotasi balik kembali gtshape.derotate() clearshape() 'hapus animasi shape gtshape.rotate() 'rotasi drawshape() 'gambar shape ke layar else gtshape.derotate() end if case 37, 100 : 'Panah kiri, 4 'jika shape dapat ditempatkan kekiri if gtgrid.testshape(x-1,y,gtshape) then movexy(-1,0) 'pindah ke kiri end if case 39, 102 : 'Panah kanan, 6 if gtgrid.testshape(x+1,y,gtshape) then movexy(1,0) end if case 40, 98 : 'Panah bawah, 2 interval dipercepat gtimer.interval = 10 end select end sub INDOPROG 41
  • 42. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Metoda DrawSel Metoda ini berfungsi menggambar sel Shape ke layar untuk animasi, metoda ini akan dipanggil oleh metoda drawshape dan OnPaint 'menggambar sel dari suatu shape private sub drawsel(pen as pen, brush as brush, _ x as integer, y as integer, _ w as integer, h as integer) if y > 2 then g.fillrectangle(brush,x*21,y*21,w,h) g.drawrectangle(pen,x*21,y*21,w,h) end if end sub Metoda DrawShape Metoda ini berfungsi menggambar Shape ke layar dengan memanggil metoda DrawSel untuk masing-masing sel 'mengambar shape secara sementara private sub drawshape() dim i as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(gtshape.currentcolor) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1), _ 20,20) next i end sub Metoda DrawShape Metoda ini berfungsi menghapus Shape di layar dengan memanggil metoda DrawSel untuk masing-masing sel (warna hitam) 'menghapus shape sementara private sub clearshape() dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1),20,20) next i end sub Metoda ReDrawNextShape Metoda ini berfungsi menggambar NextShape di layar setiap adanya perubahan nextshape INDOPROG 42
  • 43. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. 'mengambar ulang nextshape private sub redrawnextshape dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) g.fillrectangle(brush,300,60,120,120) pen.color = color.white brush.color = gtshape.nextcolor for i = 0 to 3 drawsel(pen,brush, _ 16+gtshape.nextshapesel(i,0), _ 4+gtshape.nextshapesel(i,1), _ 20,20) next i end sub Metoda ReDrawGrid Metoda ini berfungsi menggambar ulang Grid dilayar 'mengambar ulang grid private sub redrawgrid dim i,j as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(color.red) for i = 3 to 12 for j = 3 to 22 if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid pen.color = color.white brush.color = gtgrid.carr(i,j) drawsel(pen,brush,i,j,20,20) else pen.color = color.black brush.color = color.black drawsel(pen,brush,i,j,20,20) end if next j next i pen.color = color.black g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1) end sub Metoda OnPaint Metoda OnPaint akan secara otomatis diaktifkan oleh windows setiap kali layar form Tetris digambar ulang (misalnya waktu Maximize dan Minimize) 'melakukan overide terhadap sub onpaint pada base class 'untuk menggambar isi grid setiap proses refresh pada form protected overrides sub onpaint(e as painteventargs) redrawgrid() redrawnextshape() end sub INDOPROG 43
  • 44. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. Program Kongkret option explicit on imports sistem imports sistem.drawing imports sistem.windows.forms imports microsoft.visualbasic public class tetris : inherits sistem.windows.forms.form <sistem.STAThread> _ public shared sub main() randomize() application.run(new tetris) end sub private withevents gtimer as new sistem.windows.forms.timer private labelscore as new label private labelgameover as new label private gtgrid as new tgrid 'instance class tgrid private gtshape as new tshape 'instance class tshape private g as graphics private x,y as integer 'posisi x,y shape pada grid private score as integer 'score permainan public sub new() me.text = "Program Tetris" me.size = new size(450, 600) labelscore.location = new point(61,30) me.controls.add(labelscore) labelgameover.location = new point(200,30) me.controls.add(labelgameover) g = me.creategraphics() score = 0 printscore() nextshape() 'persiapkan shape berikutnya end sub 'metoda mempersiapkan shape berikutnya private sub nextshape() gtimer.interval = 200 'set interval 200 millidetik gtimer.enabled = true 'mengaktifkan timer gtshape.generatenextshape() redrawnextshape() 'cetak shape berikutnya x = 7 'koordinat awal di 7,0 y = 0 end sub 'memindahkan shape keposisi x,y private sub movexy(dx,dy) clearshape() 'hapus gambar sebelumnya x = x + dx 'ubah posisi x,y y = y + dy drawshape() 'gambar diposisi baru end sub INDOPROG 44
  • 45. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. 'metoda untuk mencetak score dilayar private sub printscore() labelscore.text = "Score : " & score.tostring() end sub 'metoda untuk mencetak gameover private sub printgameover() labelgameover.text = "Game Over" end sub 'mengerakan shape ke bawah dengan interval waktu tertentu private sub gtimer_tick(sender as object, e as eventargs) _ handles gtimer.tick 'apakah shape bisa turun kebawah if gtgrid.testshape(x,y+1,gtshape) then movexy(0,1) 'pindah shape 1 baris ke bawah else gtgrid.putshape(x,y,gtshape) 'tempatkan shape kegrid score = score + gtgrid.checkgrid() 'periksa baris yang lengkap redrawgrid() 'cetak ulang grid printscore() 'cetak score 'jika shape tertahan di baris 3, artinya game over if y < 3 then gtimer.enabled = false 'matikan timer karena gameover printgameover() 'tampil pesan gameover else nextshape() 'persiapkan gambar berikutnya end if end if end sub 'deteksi penekanan tombol dengan event keydown pada form private sub tetris_keydown(sender as object, e as keyeventargs) _ handles mybase.keydown select case e.keyvalue case 38, 104, 12,101 : 'Panah atas, 8, 5 gtshape.rotate() 'rotasi 'apakah hasil rotasi dapat ditempatkan diposisi x,y if gtgrid.testshape(x,y,gtshape) then 'kalau ya, rotasi balik kembali gtshape.derotate() clearshape() 'hapus animasi shape gtshape.rotate() 'rotasi drawshape() 'gambar shape ke layar else gtshape.derotate() end if case 37, 100 : 'Panah kiri, 4 'jika shape dapat ditempatkan kekiri if gtgrid.testshape(x-1,y,gtshape) then movexy(-1,0) 'pindah ke kiri end if case 39, 102 : 'Panah kanan, 6 if gtgrid.testshape(x+1,y,gtshape) then movexy(1,0) end if case 40, 98 : 'Panah bawah, 2 interval dipercepat INDOPROG 45
  • 46. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. gtimer.interval = 10 end select end sub 'menggambar sel dari suatu shape private sub drawsel(pen as pen, brush as brush, _ x as integer, y as integer, _ w as integer, h as integer) if y > 2 then g.fillrectangle(brush,x*21,y*21,w,h) g.drawrectangle(pen,x*21,y*21,w,h) end if end sub 'mengambar shape secara sementara private sub drawshape() dim i as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(gtshape.currentcolor) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1), _ 20,20) next i end sub 'menghapus shape sementara private sub clearshape() dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1),20,20) next i end sub 'mengambar ulang nextshape private sub redrawnextshape dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) g.fillrectangle(brush,300,60,120,120) pen.color = color.white brush.color = gtshape.nextcolor for i = 0 to 3 drawsel(pen,brush, _ 16+gtshape.nextshapesel(i,0), _ 4+gtshape.nextshapesel(i,1), _ 20,20) next i end sub 'mengambar ulang grid INDOPROG 46
  • 47. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. private sub redrawgrid dim i,j as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(color.red) for i = 3 to 12 for j = 3 to 22 if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid pen.color = color.white brush.color = gtgrid.carr(i,j) drawsel(pen,brush,i,j,20,20) else pen.color = color.black brush.color = color.black drawsel(pen,brush,i,j,20,20) end if next j next i pen.color = color.black g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1) end sub 'melakukan overide terhadap sub onpaint pada base class 'untuk menggambar isi grid setiap proses refresh pada form protected overrides sub onpaint(e as painteventargs) redrawgrid() redrawnextshape() end sub end class public class tgrid public parr(15,25) as integer 'Array menyimpan isi sel pada grid public carr(15,25) as color 'Array menyimpan warna sel pada grid 'konstruktur class tgrid public sub new() dim i, j as integer for i = 0 to 15 for j = 0 to 25 parr(i,j) = 1 'isi bingkai next j next i for i = 3 to 12 for j = 0 to 22 parr(i,j) = 0 'isi arena next j next i end sub 'Mengembalikan nilai yang menunjukan apakah 'shape dapat ditempatkan pada grid diposisi x,y public function testshape(x as integer, y as integer, s as tshape) _ as boolean dim i as integer INDOPROG 47
  • 48. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. for i = 0 to 3 'apakah sel pada grid telah terisi if parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) > 0 then return false end if next i return true end function 'Menempatkan shape pada posisi x,y di grid public sub putshape(x as integer, y as integer, s as tshape) dim i as integer for i = 0 to 3 parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = 1 carr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = s.currentcolor next i end sub 'periksa apakah ada baris yang berhasil diselesaikan pemain public function checkgrid() as integer dim i,j as integer dim b,k as integer dim complete as integer complete = 0 i = 22 do while i > 3 j = 3 do while parr(j,i) <> 0 and j < 13 j=j+1 loop if j = 13 then beep 'sound beep complete = complete + 1 for b = i to 4 step -1 for k = 3 to 12 parr(k,b) = parr(k,b-1) carr(k,b) = carr(k,b-1) next k next b else i = i - 1 end if loop return complete end function end class public class tshape private currentshape as integer 'menyimpan nomor current shape private nextshape as integer 'menyimpan nomor next shape public currentcolor as color 'menyimpan warna current shape public nextcolor as color 'menyimpan warna next shape private currentstate as integer 'nomor rotasi shape INDOPROG 48
  • 49. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. 'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta bentuk rotasinya private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}, _ {{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}}, _ {{{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}}, _ {{{0,0},{0,1},{0,2},{1,2}}, _ {{0,0},{0,1},{1,0},{2,0}}, _ {{0,0},{1,0},{1,1},{1,2}}, _ {{0,1},{1,1},{2,0},{2,1}}}, _ {{{0,0},{0,1},{0,2},{1,1}}, _ {{0,0},{1,0},{1,1},{2,0}}, _ {{1,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,1}}}, _ {{{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}, _ {{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}}, _ {{{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}, _ {{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}}} 'konstrutor untuk class tshape public sub new() generateshape(nextshape, nextcolor) end sub 'Membuat next shape berikutnya, dan menset current shape public sub generatenextshape() currentshape = nextshape currentcolor = nextcolor currentstate = 0 'rotasi ke 0 generateshape(nextshape, nextcolor) 'buat nextshape baru end sub 'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor private sub generateshape(byref shape as integer, _ byref shapecolor as color) dim c as integer shape = int(rnd*6) 'random untuk shape c = int(rnd*8) 'random untuk shape color select case c case 0 : shapecolor = color.red case 1 : shapecolor = color.green case 2 : shapecolor = color.blue case 3 : shapecolor = color.orange case 4 : shapecolor = color.pink case 5 : shapecolor = color.cyan case 6 : shapecolor = color.gray case else shapecolor = color.magenta INDOPROG 49
  • 50. Pemrograman Berorientasi Objek pada VB.NET Hendra, S.T. end select end sub 'Rotasi ke bentuk berikutnya public sub rotate() currentstate = currentstate + 1 'Rotasi berikutnya if currentstate = 4 then currentstate = 0 'Kembali ke bentuk awal end sub 'Rotasi ke bentuk sebelumnya public sub derotate() currentstate = currentstate - 1 'Rotasi sebelumnya if currentstate = -1 then currentstate = 3 end sub 'Mengembalikan sel i,j dari current shape public function currentshapesel(i as integer, j as integer) return sarr(currentshape,currentstate,i,j) end function 'Mengembalikan sel i,j dari next shape public function nextshapesel(i as integer, j as integer) return sarr(nextshape,0,i,j) 'Bentuk awal end function end class Kompilasi Program Vbc tetris.vb /r:sistem.dll /r:sistem.drawing.dll /r:sistem.windows.forms.dll INDOPROG 50