0% menganggap dokumen ini bermanfaat (0 suara)
7 tayangan22 halaman

C# - And1siahaan90

Diunggah oleh

Faisal Tifta Zany
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
7 tayangan22 halaman

C# - And1siahaan90

Diunggah oleh

Faisal Tifta Zany
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 22

C# | and1siahaan90 https://and1siahaan90.wordpress.

com/category/programming/c/

and1siahaan90 HOME ABOUT ME


JUST SHARING KNOWLEDGE & INFORMAT ION___

Category Archives: C#
C# Programming

23 OOP dengan C# (Bagian 4) Share This..


JUN
Posting ini adalah lanjutan dari posting saya yang sebelumnya tentang :

OOP dengan C# (bagian 1)


OOP dengan C# (bagian 2)
Recent Post
OOP dengan C# (bagian 3)
Windows Phone 7 : It’s
time to consider to
change your Device
Topik yang akan dibahas:
Rilis lanjutan dari
Windows Phone 7
Abstract Class
aka Mango
Sealed Class
Class Object Asal Mula Maskot
Interface Hijau Android
Delegates dan Event
8 Trik ‘Santai’ Mengelola
Stres di Kantor

Mengungkap 7
Abstract Class Rahasia Pria

Setiap tipe Window pasti mempunyai bentuk tampilan yang berbeda misal combobox, listbox, button,
Categories
dll. Berarti setiap class turunan dari Window harus mempunyai method DrawWindow() nya sendiri yang
berbeda satu sama lain. Untuk memastikan bahwa setiap class turunan Control harus mempunyai Information (14)
method DrawWindow() maka anda harus mendefinisikan class tersebut sebagai abstract class dan Campuss (1)
memiliki method abstract yang belum diimplementasikan.
Economy (1)

Abstract method tidak mempunyai implementation, abstract method hanya semacam kontrak yang Health (2)
harus dipenuhi. Semua class yang diturunkan dari class yang mempunyai abstract method harus International (3)
mengimplementasikan method tersebut.
Lifestyle (4)

Class yang didefinisikan sebagai abstract class tidak dapat dibuat instan class / objek, class yang Techno (2)
didefinisikan abstract hanya dapat digunakan dengan cara diturunkan.
unique (1)

Mobile Computing (3)


1: public abstract class Control { Android (1)
2: private int top; Windows Phone (2)
3: private int left;
4: Programming (4)
5: protected int Top { C# (4)
6: get { return this.top;}
7: set { this.top = value;}
8: } Archieves
9: protected int Left {
July 2011 (6)
10: get {return this.left;}
11: set {this.left = value;} June 2011 (15)
12: }

1 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

13: public Control(int top, int left) {


14: Top = top; Top Posts & Pages
15: Left = left;
Perbedaan D4 (Diploma
16: }
4) dengan S1 (Sarjana)
17: //abstract method harus diimplementasikan
18: public abstract void DrawWindow();
19: } Twit
20:
If you are diamond, your
21: public class ListBox : Control {
job is shining...Diamond
22: private string listBoxContent;
itu ditemukan, tak perlu
23: public ListBox(int top, int left, string contents) teriak-teriak agar
24: : base(top, left) { ditemukan. #quoteDewa
25: this.listBoxContent = contents; 2 years ago
26: }
Karena kesulitan tak
27: pernah bisa diramal
28: public override void DrawWindow() { kapan datangnya, we just
29: Console.WriteLine("Position :({0},{1})", Top, Left); make fun of it..and let the
30: Console.WriteLine("Menuliskan string pada listbox: {0}", life goes on. #quoteDewa
31: listBoxContent); 2 years ago

32: } I know that feel bro...


33: #PrabowoKokGitu
34: } #ApaGueBilangJokowiJk
Menang http://t.co
35:
/NNeMqvObpr 2 years ago
36: public class Button : Control {
37: public Button(int top, int left) : base(top, left) { } Follow @andysiahaan
38: public override void DrawWindow() {
39: Blogroll
Console.WriteLine("Menggambar button pada ({0},{1})", Top, Left);
40: }
41: } Eko Kurniawan Khannedy
42: class LatAbstract { Blog
43: static void Main(string[] args) { T V Streaming
44: Control[] winArray = new Control[3];
45: winArray[0] = new ListBox(5, 10, "Pada ListBox");
46: winArray[1] = new Button(5, 6); Yahoo!
47: for (int i = 0; i < 2; i++) {
48: winArray.DrawWindow();
49: }
50: } Counter
51: }

hit counter
Tapi untuk kasus diatas abstract masih mempunyai keterbatasan, jika anda ingin membuat class
DropDownList yang hendak diturunkan dari class ListBox, maka anda tidak dapat memaksakan method
Favorite Quotations
DrawWindow() harus ada di class tersebut.
Maybe God has a bigger
Sealed Class plan for me than I had for
myself.
Jika anda ingin membuat class yang tidak dapat diturunkan lagi maka anda dapat menambahkan
keyword ‘sealed’.

Obj ect Root dari semua class

Semua class dari semua type diturunkan dari satu class untama yaitu class object. Meskipun tidak
dituliskan secara eksplisit namun pada dasarnya semua class diturunkan dari class object.

Beberapa method yang ada pada class object adalah: Equals(), GetHashCode(), GetType(), ToString(),
Finalize(), MemberwiseClone(), ReferenceEquals().

Method dari class yang ada diatas dapat dioverride oleh semua class karena pada dasarnya semua

2 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

class diturunkan dari class object.

1: public class Cat {


2: private int weight;
3: public Cat(int weight) {
4: this.weight = weight;
5: }
6:
7: public override string ToString() {
8: return weight.ToString();
9: }
10: }
11: class LatObject {
12: static void Main(string[] args) {
13: Cat catty = new Cat(60);
14: Console.WriteLine("Berat si catty : " + catty);
15: }
16: }

Boxing dan Unboxing Types

Boxing dan Unboxing adalah suatu proses ketika suatu tipe data value (seperti int) di konversikan
menjadi tipe reference / object. Istilah boxing berarti diubah menjadi object dan unboxing berarti
dikembalikan lagi ke tipe data value.

Proses boxing dilakukan secara implisit jadi compiler otomatis akan melakukannya ketika kita mengisi
nilai bertipe value kedalam variabel bertipe object.

image

1: int myIntegerValue = 5;
2: object myObject = myIntegerValue; // cast to an object
3: myObject.ToString();

Tidak seperti boxing, proses unboxing harus eksplisit. Ketika proses unbox kita harus tahu tipe data apa
yang kita ingin konversikan dari tipe objek-nya.

1: int myInt = 123;


2: //proses boxing (dilakukan secara otomatis)
3: object objInt = myInt;
4: Console.WriteLine("Nilai ObjInt : {0}",objInt.ToString());
5:
6: //proses unboxing (harus dilakukan secara eksplisit)
7: myInt = (int)objInt;
8: Console.WriteLine("Nilai myInt : {0}", myInt.ToString());

Menghindari Boxing dan unboxing dengan Generic

Proses boxing dan unboxing mempengaruhi performa program, karena semua harus di boxing
kedalam tipe object (misal: dalam penggunaan ArrayList). Pada C# 2.0 keatas sudah mendukung
generic sehingga proses boxing dan unboxing dapat dihindari.

3 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

Interfaces

Jika anda ingin mendefinisikan tipe baru tetapi tidak ingin mengimplementasikan isinya secara
langsung maka anda dapat menggunakan interfaces.

Pada dasarnya interface adalah sebuah kontrak, ketika anda mendesign interface seolah-olah anda
mengatakan “jika anda ingin menggunakan class ini maka anda harus mengimplementasikan method,
property yang sudah disediakan”. Class yang menggunakan interface tersebut setuju dengan kontrak
dan mengimplementasikan requirement yang ditentukan.

Dibandingkan dengan abstract class, abstract class hanya bisa digunakan di class paling atas
‘top-hierarchy’ sedangkan interface dapat digunakan di setiap class yang diinginkan (setiap class dapat
mengimplementasikan lebih dari satu interface).

Perbedaan Interface dan Abstract Class

Programmer sering merasa bingung dalam mebedakan Interface dan Abstract Class. Beberapa
perbedaannya adalah:

Cara penggunaan Abstract Class adalah diturunkan, sedangkan cara penggunaan Interface adalah
diimplementasikan.
Pada C# lambang untuk menurunkan class dan menggunakan interfaces sama-sama menggunakan
tanda “:” (titik dua). Tetapi untuk membedakan biasanya nama interface diawali dengan huruf I di
depan misal: IEnumerable, IDisposable, dll.
Sebuah class hanya dapat diturunkan dari satu abstract class tapi dapat menggunakan lebih dari
satu interfaces.
Method dan member variable pada abstract class boleh sudah ada isinya, sedangkan pada
interfaces semua belum ada implementasinya.
Pada Abstract Class semua method / member variable yang abstract harus diimplementasikan di
class turunannya.
Pada Interface semua member variable dan method harus diimplementasikan di class yang
menggunakan interface tersebut.
Access Modifier pada method dan member variable di Interface secara implisit adalah public.

1: interface IStorable {
2: void Read();
3: void Write();
4: int Status { get; set; }
5: }
6:
7: public class Document : IStorable {
8: private int status = 0;
9:
10: public Document(string s) {
11: Console.WriteLine("Create : {0}", s);
12: }
13:
14: public void Read() {
15: Console.WriteLine("Mengimplementasikan method Read dari IStorable
16: }
17:
18: public void Write() {
19: Console.WriteLine("Mengimplementasikan method Write dari IStorabl
20: }
21:
22: public int Status {
23: get { return this.status; }
24: set { this.status = value; }

4 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

25: }
26: }
27:
28: class LatSimpleInterface {
29: static void Main(string[] args) {
30: Document doc = new Document("New Document");
31: doc.Read();
32: doc.Write();
33: doc.Status = 1;
34: Console.WriteLine("Document status : {0}", doc.Status);
35: }
36: }

Mengimplementasikan lebih dari satu Interface

Pada C# sebuah class hanya dapat diturunkan dari sebuah class saja, tidak seperti bahasa C++ yang
mendukung multipe inheritance. Tetapi untuk interface anda dapat menggunakan lebih dari satu
interface dalam sebuah class.

Misal saja untuk class dokumen diatas dapat disimpan dan dapat juga dikompres datanya, maka anda
dapat menambahkan interface Icompressible kedalam class tersebut.

Interface juga dapat dikombinasikan, anda bisa menambahkan inteface kedalam interface lain, misal:

1: interface ICompessible {
2: void Compress();
3: void Decompress();
4: }
5: interface ILoggedCompresible : ICompessible {
6: void LogSavedBytes();
7: }

Ketika anda menggunakan interface IloggedCompresible maka anda harus mengimplementasikan


method Compress(), Decompress(), dan LogSavedBytes().

1: interface IStorable {
2: void Read();
3: void Write(object obj);
4: int Status { get; set; }
5: }
6:
7: interface ICompressible {
8: void Compress();
9: void Decompress();
10: }
11:
12: interface ILoggedCompressible : ICompressible {
13: void LogSavedBytes();
14: }
15:
16: interface IStorableCompressible : IStorable, ILoggedCompressible{
17: void LogOriginalSize();
18: }

5 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

19:
20: interface IEncryptable {
21: void Encrypt();
22: void Decrypt();
23: }
24:
25: public class Document : IStorableCompressible, IEncryptable {
26: private int status = 0;
27:
28: public Document(string s) {
29: Console.WriteLine("Creating Document: {0}", s);
30: }
31:
32: public void LogOriginalSize() {
33: Console.WriteLine("Mengimplementasikan method LogOriginalSize");
34: }
35:
36: public void Read() {
37: Console.WriteLine("Mengimplementasikan method Read");
38: }
39:
40: public void Write(object obj) {
41: Console.WriteLine("Mengimplementasikan method Write");
42: }
43:
44: public int Status {
45: get { return status; }
46: set { this.status = value; }
47: }
48:
49: public void LogSavedBytes() {
50: Console.WriteLine("Mengimplementasikan method LogSavedBytes");
51: }
52:
53: public void Compress() {
54: Console.WriteLine("Mengimplementasikan method Compress");
55: }
56:
57: public void Decompress() {
58: Console.WriteLine("Mengimplementasikan method Decompress");
59: }
60:
61: public void Encrypt() {
62: Console.WriteLine("Mengimplementasilan method Encrypt");
63: }
64:
65: public void Decrypt() {
66: Console.WriteLine("Mengimplementasikan method Decrypt");
67: }
68: }
69:
70: class LatMultipleInterface {
71: static void Main(string[] args) {
72: Document doc = new Document("New Document");
73: doc.Read();
74: doc.Compress();
75: doc.LogSavedBytes();
76: doc.LogOriginalSize();
77: doc.Encrypt();

6 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

78: doc.Decrypt();
79: doc.Decompress();
80: doc.Status = 1;
81: Console.WriteLine("Status {0}", doc.Status);
82: }
83: }

Delegates dan Ev ent

Mungkin anda pernah menjumpai situasi dimana anda ingin mengeksekusi suatu action tetapi anda
belum tahu pasti isi dari detail methodnya atau bahkan tidak tahu objectnya. Misal method untuk
menghandle button press (ketika object button tersebut ditekan). Anda harus membayangkan bahwa
pembuat komponen button, textbox, listbox bukanlah programmer yang menggunakan object tersebut.
Pembuat button hanya tahu bahwa button tersebut mempunyai event click (ketika diklik) tapi pembuat
buton tidak tahu apa yang terjadi ketika button tersebut diklik (hanya diketahui oleh programmer yang
menggunakan button tersebut).

Untuk mengatasi masalah diatas pembuat button sudah menyediakan event misal click, mouse_mive,
dll. jika programmer hendak menggunakannya maka dapat mengaksesnya menggunakan delegates.
Delegates adalah semacam kontrak yang harus dipenuhi ketika hendak menggunakan method tertentu
(mirip dengan interfaces).

1: delegate void StringProcesssor(string input);


2: class Person {
3: private string name;
4:
5: public Person(string name) {
6: this.name = name;
7: }
8:
9: public void Say(string message) {
10: Console.WriteLine("{0} says : {1}", name, message);
11: }
12: }
13:
14: class Background {
15: public static void Note(string note) {
16: Console.WriteLine("({0}) ", note);
17: }
18: }
19:
20: class LatSimpleDelegates {
21: static void Main(string[] args) {
22: Person rick = new Person("Erick");
23: Person jhon = new Person("Jhon");
24: StringProcesssor jonsVoice, rickVoice, background;
25: rickVoice = new StringProcesssor(rick.Say);
26: jonsVoice = new StringProcesssor(jhon.Say);
27: background = new StringProcesssor(Background.Note
28:
29: rickVoice("Hello Jhon !!");
30: jonsVoice("Hello rick !!");
31: background("Suara ramai lalu lintas");
32: }
33: }

7 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

Posted by andysiahaan on June 23, 2011 in C # Leave a comment

23 OOP dengan C# (Bagian 3)


JUN
Posting ini adalah lanjutan dari posting saya yang sebelumnya tentang :

1. OOP dengan C# (bagian 1)


2. OOP dengan C# (bagian 2)

Pada topik ini akan dibahas

Specialization dan Generalization


Inheritance
Polymorphism
Versioning

Specialization dan Generalization

Class dan instannya (objek) tidak berdiri sendiri, seperti objek manusia yang merupakan mahluk sosial
tidak hanya berdiri sendiri, objek akan saling berelasi dan berinteraksi, demikian *** pada OOP.

Salah satu hubungan antar objek yang paling penting yang terjadi di dunia nyata adalah spesialisasi
yang bisa didefinisikan sebagai is-a relationship, misal anjing adalah mamalia, jika anjing termasuk
anggota mamalia maka dia memiliki ciri-ciri special khas yaitu menyusui, punya bulu. Selain sifat-sifat
pada mamalia anjing juga memiliki ciri yang spesifik khas anjing yang tidak dipunyai anggota
mamalia lainnya seperti kucing.

Relasi spesialisasi dan generalisasi terjadi pada contoh diatas, anjing dan kucing secara general
merupakan anggota mamalia tetapi juga terspesialisasi secara spesifik sebagai anjing dan kucing yang
mempunyai ciri khas yang berbeda. Relasi tersebut dapat digambarkan secara hirarki.

Misal gambar dibawah akan menunjukan hirarki antara class window, button, dan listbox

image

Gambar diatas menunjukan relasi antara window, button, dan listbox. Button dan listbox sama-sama
memiliki karakteristik yang dimiliki oleh window, tetapi button dan listbox juga memiliki ciri-ciri spesifik
khas mereka sendiri. Contoh lain yang lebih rinci untuk menggambarkan spesialisasi dan generalisasi
dapat digambarkan sebagai berikut:

image

Inheritance

Pada C# hubungan spesialisasi diimplementasikan menggunakan prinsip inheritance. Penulisan


inheritance di C# sebagai berikut

public class ListBox : Window

Kode diatas berarti class ListBox adalah turunan dari class Window

Penggunaan inheritance dapat dilihat pada program dibawah ini

1: public class Window {

8 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

2: //variabel dideklarasikan private sehingga


tidak bisa diakses oleh kelas
3: //turunannya
4: private int top;
5: private int left;
6:
7: //objek konstruktor
8: public Window(int top, int left) {
9: this.top = top;
10: this.left = left;
11: }
12:
13: public void DrawWindow() {
14: Console.WriteLine("Draw window
pada ({0},{1})",
15: top, left);
16: }
17: }
18:
19: public class ListBox : Window {
20: //member variable baru pada class anak
21: private string listBoxContent;
22: public ListBox(int top, int left,
string contents):base(top,left) {
23: this.listBoxContent = contents;
24: }
25:
26: //versi baru karena override dari
base classnya
27: public new void DrawWindow() {
28: base.DrawWindow();
29: Console.WriteLine("Menuliskan
string pada listbox: {0}",
30: listBoxContent);
31: }
32: }
33:
34: class LatInheritance {
35: public static void Main(string[] args) {
36: Window objWindow = new Window(10, 15);
37: objWindow.DrawWindow();
38:
39: ListBox objList = new ListBox(15,
20, "Hello ListBox");
40: objList.DrawWindow();
41: }
42: }

Memanggil Base Class Constructor

Pada contoh diatas class ListBox adalah turunan dari class Window, class ListBox mempunyai
konstruktornya sendiri yang memiliki tiga parameter, konstruktor pada class ListBox dapat menggunakan
tanda : (titik dua) untuk memanggil kosntruktor base class-nya (konstruktor pada class Window)

public ListBox(int top, int left, string theContents):base(top, left)

Karena konstruktor tidak dapat diturunkan maka class turunan harus memiliki konstruktor sendiri.

9 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

Polymorphism

Ada dua aspek yang paling penting pada inheritance yang pertama adalah code reuse, sebagai
contoh ketika anda membuat class ListBox maka anda dapat menggunakan logic yang sudah dibuat
pada class Window

Aspek kedua yang tidak kalah penting dari inheritance adalah polymorhism, poly berarti banyak dan
morph berarti bentuk, jadi polymorphism dapat berarti dapat menggunakan banyak bentuk tanpa harus
mengacu details yang sama.

Dari istilahnya Polymorphism kesannya sulit dan kompleks, tetapi sebenarnya simple, ilustrasinya
begini ketika sebuah perusahaan telpon / provide telpon mengirimkan signal ke anda (dering telpon),
mereka tidak tahu telpon apa yang anda gunakan, bisa model lama dengan dering kuno, bisa HP
dengan dering music mp3, T V Phone, PDA Phone dll. yang provider tahu bahwa masing-masing
telepon mempunyai ‘base type’ telepon dan mempunyai method untuk berdering. Ketika provider
mengirimkan signal mereka hanya berharap bahwa telepon akan berdering tidak peduli jenis
telponnya, nah provider telepon memperlakukan telepon anda secara polymorphism.

Membuat Type Polymorphism

Dari gambar diatas dapat anda lihat, ListBox is-a Control (karena ListBox turunan dari Control), Button
is-a Control, kita berharap bahwa dapat memperlakukan keduanya sebagai Control. Misal anda
mempunyai banyak control di collection untuk digambar ke windows, dan mengharapkan ketika
memanggil method draw() pada control maka control2 tersebut akan tergambar sesuai dengan tipe
objectnya (mis: ListBox, RadioButton, Command, dll).

Anda dapat mengimplementasikan polymorphism dengan dua cara yaitu:

Membuat virtual method pada base class (class induk)


Membuat class turunan yang mempunyai method dengan keyword override yang mengganti isi dari
method dengan keyword virtual yang ada pada base class-nya.

Penggunaan prinsip polymorphism dapat dilihat pada contoh program dibawah ini

1: public class Control {


2: //variabel dideklarasikan private sehingga tidak bisa
diakses oleh kelas
3: //turunannya
4: private int top;
5: private int left;
6:
7: protected int Top {
8: get {
9: return this.top;
10: }
11: set {
12: this.top = value;
13: }
14: }
15:
16: protected int Left {
17: get {
18: return this.left;
19: }
20: set {
21: this.left = value;
22: }

10 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

23: }
24:
25: //objek konstruktor
26: public Control(int top, int left) {
27: Top = top;
28: Left = left;
29: }
30:
31: public virtual void DrawWindow() {
32: Console.WriteLine("Draw window pada ({0},{1})",
33: top, left);
34: }
35:
36: }
37:
38: public class ListBox : Control {
39: //member variable baru pada class anak
40: private string listBoxContent;
41: public ListBox(int top, int left, string contents)
42: : base(top, left) {
43: this.listBoxContent = contents;
44: }
45:
46: //versi baru karena override dari base classnya
47: public override void DrawWindow() {
48: base.DrawWindow();
49: Console.WriteLine("Menuliskan string pada listbox:
{0}", listBoxContent);
51: }
52:
53: }
54:
55: public class Button : Control {
56: public Button(int top, int left) : base(top, left) {}
57:
58: public override void DrawWindow() {
59: //base.DrawWindow();
60: Console.WriteLine("Menggambar button pada ({0},{1})",
Top, Left);
61: }
62: }
63: class LatPolymophism {
64: static void Main(string[] args) {
65: Control win = new Control(10, 15);
66: ListBox lstBox = new ListBox(5, 10, "Text
pada ListBox");
67: Button b = new Button(5, 6);
68: win.DrawWindow();
69: lstBox.DrawWindow();
70: b.DrawWindow();
71:
72: Control[] winArray = new Control[3];
73: winArray[0] = new Control(10, 15);
74: winArray[1] = new ListBox(5, 10, "Pada
ListBox");
75: winArray[2] = new Button(5, 6);
76:
77: for (int i = 0; i < 3; i++) {
78: winArray.DrawWindow();

11 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

79: }
80: }
81: }

Dapat dilihat dari contoh diatas bahwa base class yaitu Window mempunyai method yang bernama
DrawWindow() yang mempunyai keyword virtual, ini berarti method tersebut dapat di override atau
diganti implementasinya dengan method yang nama dan parameternya sama persis di kelas
turunannya yaitu class ListBox.

Versioning dengan new dan ov erride keyw ord

Pada contoh diatas digunakan keyword virtual pada base class agar dapat dioverride oleh class
turunannya. Akan timbul masalah jika misal: Perusahan A membuat class Control kemudian
perusahaan B membelinya untuk membuat ListBox dan RadioButton (tapi B tidak bisa memodifikasi
class Control karena hanya beli tanpa code), pada saat membuat ListBox perusahaan B menambahkan
fungsi sort() kedalam class tersebut

1: public class ListBox : Control


2: {
3: public virtual void Sort( ) {...}
4: }

Hal diatas tidak menjadi masalah sampai perusahaan A menambahkan method sort() juga dalam class
Control:

1: public class Control


2: {
3: // ...
4: public virtual void Sort( ) {...}
5: }

Maka akan menjadi rancu karena ada dua method dengan nama yang sama ketika anda akan
memanggil method sort dari class turunan ListBox, tidak bisa dibedakan mana method sor() pada
Control atau ListBox, untuk menangani masalah ini C# menyediakan keyword new.

1: public class ListBox : Control


2: {
3: public new virtual void Sort( ) {...}
4: }

Posted by andysiahaan on June 23, 2011 in C # Leave a comment

23 OOP dengan C# (Bagian 2)


JUN
Posting ini adalah lanjutan dari posting saya yang sebelumnya tentang OOP dengan C# (Bagian 1)

Topik yang dibahas

12 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

Destroy Object
Mengunakan Using Statement
Passing Parameter
Overloading Konstruktor dan Method
Enkapsulasi data dengan property
Gen dan Set Accessor

Destroy Obj ect


Karena C# menyediakan garbage collector, anda tidak perlu secara eksplisit men-destroy objek. Jika
anda bekerja dengan unmanage resource (kode yang tidak di handle oleh CLR) maka anda tetap harus
mendestroy objek secara manual. Adapun cara pendeklarasian destruktor pada C# sebagai berikut:

1: ~MyClass( ){
2: // perintah disini
3: }

Jika anda menggunakan managed code pada C# maka anda tidak diperbolehkan untuk mendestroy object
secara langsung karena pada managed code, destroy object sudah diatur oleh komponen garbage collectorpada
CLR. Untuk men-destroy objek secepat mungkin setelah tidak diperlukan lagi anda dapat menggunakan
interface IDisposable.

1: class Testing : IDisposable {


2: bool is_disposed = false;
3: protected virtual void Dispose(bool disposing) {
4: if (!is_disposed) { //hanya sekali dispose
5: if (disposing) {
6: Console.WriteLine(
7: "Sudah di dispose tanpa masuk ke desktruktor");
8: }
9: //bersihkan objectnya disini
10: Console.WriteLine("Disposing...");
11: }
12: this.is_disposed = true;
13: }
14:
15: public void Dispose() {
16: Dispose(true);
17: GC.SuppressFinalize(this);
18: }
19:
20: ~Testing(){
21: Dispose(false);
22: Console.WriteLine("Didalam destruktor");
23: }
24: }
25:
26: class LatDispose {
27: public static void Main(string[] args) {
28: Testing t1 = new Testing();
29: t1.Dispose();
30: }
31: }

Menggunakan Using Statement


Untuk memudahkan developer C# menyediakan statement using untuk memastikan bahwa method
dispose dijalankan. (kadang kita lupa untuk memanggil method dispose ini). Penggunaan using hanya
bisa digunakan untuk class yang mengimplementasikan IDisposable.

13 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

1: class LatDispose {
2: public static void Main(string[] args) {
3: using (Testing t1 = new Testing()) {
4: Console.WriteLine("Menggunakan Keyword Using..");
5: }
6: }
7: }

Passing Parameter
Parameter pada C# secara default yang dikirimkan kedalam method adalah nilainya, atau “pass by
value”. Jadi jika ada perubahan nilai parameter pada method tersebut tidak berpengaruh ke method.

1: public class Time {


2: // private member variables
3: private int Year;
4: private int Month;
5: private int Date;
6: private int Hour;
7: private int Minute;
8: private int Second;
9:
10: public void DisplayCurrentTime() {
11: System.Console.WriteLine("{0}/{1}/{2} {3}:{4}:{5}",
12: Month, Date, Year, Hour, Minute, Second);
13: }
14:
15: public int GetHour() {
16: return Hour;
17: }
18:
19: public void GetTime(int h, int m, int s) {
20: h = Hour;
21: m = Minute;
22: s = Second;
23: }
24:
25: public Time(System.DateTime dt) { //konstruktor
26: Year = dt.Year;
27: Month = dt.Month;
28: Date = dt.Day;
29: Hour = dt.Hour;
30: Minute = dt.Minute;
31: Second = dt.Second;
32: }
33:
34: class MethodByReference {
35:
36: public static void Main(string[] args) {
37: System.DateTime currentTime = System.DateTime.Now
38: Time t = new Time(currentTime);
39: t.DisplayCurrentTime();
40:
41: int theHour = 0;
42: int theMinute = 0;
43: int theSecond = 0;
44: t.GetTime(theHour, theMinute, theSecond);

14 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

45: System.Console.WriteLine("Current time: {0}:{1}:{2}",


46: theHour, theMinute, theSecond);
47: }
48: }
49: }

image
Jika ingin mengirimkan parameter referenced / ‘pass by reference’ anda dapat menambahkan keyword
ref sebelum tipe data pada method parameternya.

1: //tambahkan keyword ref pada parameter


2: public void GetTime(ref int h,ref int m,ref int s) {
3: h = Hour;
4: m = Minute;
5: s = Second;
6: }
7:
8: //pada method main tambahkan ref pada method pemanggil
9: int theHour = 0;
10: int theMinute = 0;
11: int theSecond = 0;
12: t.GetTime(ref theHour, ref theMinute, ref theSecond);
13: System.Console.WriteLine("Current time: {0}:{1}:{2}",
14: theHour, theMinute, theSecond);

image

Ov erloading Konstruktor & Method


Pada C# anda dapat mendeklarasikan method atau konstruktor dengan nama yang sama pada sebuah
class, tetapi parameter method tersebut harus berbeda bisa jumlah atau tipe datanya. Pada contoh
dibawah ini akan ditunjukan bagaimana cara menggunakan overloading konstruktor

1: public class Time


2: {
3: // private member variables
4: private int Year;
5: private int Month;
6: private int Date;
7: private int Hour;
8: private int Minute;
9: private int Second;
10:
11: // public accessor methods
12: public void DisplayCurrentTime()
13: {
14: System.Console.WriteLine("{0}/{1}/{2} {3}:{4}:{5}",
15: Month, Date, Year, Hour, Minute, Second);
16: }
17: // constructors
18: public Time(System.DateTime dt)
19: {
20: Year = dt.Year;
21: Month = dt.Month;
22: Date = dt.Day;
23: Hour = dt.Hour;

15 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

24: Minute = dt.Minute;


25: Second = dt.Second;
26: }
27: public Time(string strTime) // overloading konstruktor
28: {
29: Console.WriteLine(strTime);
30: }
31:
32: public Time(int Year, int Month, int Date,
33: int Hour, int Minute, int Second) // overloading konstruktor
34: {
35: this.Year = Year;
36: this.Month = Month;
37: this.Date = Date;
38: this.Hour = Hour;
39: this.Minute = Minute;
40: this.Second = Second;
41: }
42: }
43:
44: class Tester
45: {
46: public void Run()
47: {
48: System.DateTime currentTime = System.DateTime.Now
49: Time time1 = new Time(currentTime);
50: time1.DisplayCurrentTime();
51: Time time2 = new Time(2000, 11, 18, 11, 03, 30);
52: time2.DisplayCurrentTime();
53: }
54:
55: static void Main()
56: {
57: Tester t = new Tester();
58: t.Run();
59: }
60: }

Selain konstruktor overloading juga bisa diterapkan pada method dalam suatu class yang sama, contoh
penulisannya:

1: void MyMethod(int p1);


2: void MyMethod(int p1, int p2); // beda banyak parameter
3: void MyMethod(int p1, string s1); // beda tipe data

Enkapsulasi data dengan Property


Enkapsulasi / penyembunyian informasi adalah konsep yang selama ini sering anda dengar. Pada
OOP informasi dibungkus dalam sebuah Class sehingga orang yang menggunakan class tersebut tidak
perlu tahu detail-nya, hanya cukup mengetahui method dan property apa saja yang ada dalam class
tersebut beserta kegunaannya.

Pada pemrograman berorientasi objek variabel dalam class biasanya diberi access modifier private, ini
berarti hanya method dalam class tersebut yang dapat mengakses variabelnya. Yang menjadi
pertanyaan bagaimana cara anda mengakses variabel bertipe private tersebut? Mengapa harus dibuat
private?

Jika anda membuat variable tersebut public maka user yang menggunakan class tersebut bisa

16 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

memasukan nilai yang tidak kita inginkan, maka anda harus mendeklarasikan variable tersebut secara
private agar pada saat setMethod() anda dapat menambahkan validasi inputan dari user.

Anda bisa membuat public method set dan get untuk memberi dan mengambil nilai variabel tersebut,
misal:

1: // private member variables


2: private int Year;
3:
4: public int getYear() //get method
5: {
6: return this.Year;
7: }
8:
9: public void setYear(int Year) //set method
10: {
11: this.Year = Year;
12: }

Selain menggunakan cara tersebut diatas pada C# disediakan object property untuk memberi nilai dan
mengambil nilai dari private variabel dalam suatu class. Penggunaan object property lebih
memudahkan anda dalam penulisan kode dibandingkan harus membuat dua method set dan get
untuk mengakses satu variabel private. Contoh penggunaan property dapat dilihat pada contoh kode
dibawah ini.

1: class Mahasiswa {
2: private string nim;
3: private string nama;
4:
5: public string Nim {
6: get {
7: return nim;
8: }
9: set {
10: this.nim = value;
11: }
12: }
13:
14: public string Nama {
15: get {
16: return nama;
17: }
18: set {
19: this.nama = value;
20: }
21: }
22:
23: public string DisplayInfo() {
24: return Nim + " " + Nama;
25: }
26: }
27:
28: class ClassProperty {
29: public static void Main(string[] args) {
30: Mahasiswa mhs1 = new Mahasiswa();
31: mhs1.Nim = "22002321";

17 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

32: mhs1.Nama = "Erick";


33: Console.WriteLine(mhs1.DisplayInfo());
34: }
35: }

Get Accessor
Penggunakan get{} pada property mirip dengan jika anda menggunaan method getValue() / getter
method pada java, get pasti mengembalikan nilai jadi dalam kalang get harus ada return valuenya.

Set Accessor
Penggunaan set{} pada property mirip dengan jika anda menggunakan setValue() / setter method pada
java, set digunakan untuk memberi nilai kedalam class variable. Pada C# jika anda memberi nilai
pada property maka set{} otomatis dijalankan.

Posted by andysiahaan on June 23, 2011 in C # Leave a comment

23 OOP dengan C# (Bagian 1)


JUN
Karena di semester 5 belajar C# Programming di kampus, saya ingin share juga materi yang saya
dapat dari http://mugi.or.id/ agar bisa berguna juga untuk teman-teman mahasiswa yang lain yang
ingin belajar C# Programming.

Topik yang dibahas kali ini

Pengantar OOP
Class dan Object
C# Modifier
Konstruktor
Initilizer
“this” keyword
static dan instance member

Pengantar OOP

Aplikasi berbasis windows dan web adalah program yang sangat kompleks yang menyajikan tampilan
menarik kepada user dan menawarkan user interface yang kompleks dengan tombol, dropdown, popup
menu, toolbox, dan masih banyak komponen yang lain. Dibelakang user interface tersebut masih ada
hubungan bussiness prosess yang kompleks seperti misal hubungan antara Product, Customer, dan
Order yang melibatkan banyak logika dan pengolahan data.

Untuk menangani berbagai kompleksitas yang terjadi maka programmer mengembangkan teknik yang
diberi nama “Objcet Oriented Programming”, dengan tujuan yang sederhana yaitu mengatur
kompleksitas dengan memodelkan aspek esensial yang ada. Jika model yang dikembangkan semakin
mendekati problem yang akan dipecahkan maka semakin mudah *** persoalan tersebut dapat
dimengerti sehingga program lebih mudah ditulis dan di-maintain.

Problem yang akan dipecahkan dan semua informasi yang berhubungan dengan problem tersebut
sering disebut sebagai problem domain. Misal jika anda ingin membuat program untuk keperluan
Inventory dan Sales di suatu perusahaan maka problem domainnya adalah semua informasi tentang
perusahaan tersebut yang berhubungan dengan pengaturan stok inventory, cara penjualan,
pemasukan penjualan dan data lainnya. Manaager penjualan dan Manager bagian gudang akan
menjadi problem domain expert yang dapat membantu anda dalam menyelesaikan masalah.

Design dari Object Oriented harus berisi objek-objek yang ada pada problem domain tersebut.
Sebagai contoh jika problem domainnya adalah mesin AT M maka objek didalamnya seharusnya
adalah customer, rekening, dll.

Class v s Obj ect

18 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

Apa sich bedanya?. Jika anda ingin membangun rumah Class adalah blueprint / gambar (berisi
spesifikasi lengkap dari rumah yang akan dibuat, ukuran, jumlah, dll). Sedangkan object adalah bentuk
fisik / rumah yang dibangun berdasarkan blueprint / class yang sudah ada, biasa disebut instan class /
object.

image

Elemen Pada Class

Class pada C# terdiri dari :

· Instance Variable / Field

· Method

image

Method digunakan untuk merubah state pada field.

Mendefinisikan Class

Class di C# dapat terdiri dari kumpulan variable (field), property dan method. Cara untuk menggunakan
class adalah dengan membuat instan class-nya. Untuk menjalankan class maka harus ada satu method
main pada class tersebut. contoh pendeklarasian class di C# sebagai berikut:

1: public class Time


2: {
3: // private variables atau field
4: private int year;
5: private int month;
6: private int date;
7: private int hour;
8: private int minute;
9: private int second;
10:
11: // public methods
12: public void DisplayCurrentTime()
13: {
14: Console.WriteLine("Menampilkan Waktu..");
15: }
16: }
17:
18: class Program
19: {
20: static void Main(string[] args)
21: {
22: Time timeObject = new Time(); //membuat instan class
23: timeObject.DisplayCurrentTime(); //memanggil method dalam class
24: }
25: }

C# Modifier

C# memiliki beberapa modifier class yaitu:

image

Access Modifiers

19 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

Access Modifiers digunakan untuk menentukan hak akses dari class dan method, adapun access
modifier yang ada pada C# sebagai berikut:

image

Method Arguments

Method pada C# dapat memiliki banyak argumen dengan tipe data yang berbeda. Method juga dapat
memiliki nama yang sama asal parameter / tipe datanya berbeda (Method Overloading).

1: class MyClass {
2: public void SomeMethod(int firstParam, double secondParam) {
3: Console.WriteLine("Parameter 1 : {0} dan parameter 2 : {1}",
4: firstParam, secondParam);
5: }
6:
7: //overload method
8: public void SomeMethod(int firstParam) {
9: Console.WriteLine("Parameter 1 : {0}", firstParam);
10: }
11:
12: public void SomeMethod(int firstParam, string secondParam) {
13: Console.WriteLine("Parameter 1 : {0} dan parameter 2 : {1}",
14: firstParam, secondParam);
15: }
16: }
17:
18: class MethodArgumen {
19: static void Main(string[] args) {
20: MyClass m1 = new MyClass(); //membuat instan object
21: m1.SomeMethod(12, 1.25);
22: m1.SomeMethod(34);
23: m1.SomeMethod(12, "Hello");
24: }
25: }

Konstruktor

Konstruktor adalah method yang namanya sama dengan nama class-nya. Konstruktor digunakan untuk
inisialisasi variabel ketika membuat instan class / objek baru. Sebenarnya setiap kali anda membuat
instant class / objek baru maka konstruktor dijalankan. Jika anda tidak mendefinisikan konstruktor secara
eksplisit maka tetap dianggap membuat konstruktor kosong.

Konstruktor juga dapat di-overload (anda dapat membuat konstruktor lebih dari satu asal parameternya
jumlahnya beda atau tipe datanya beda). Variabel dalam class harus diinisialisasi, nilai defaultnya
adalah

image

1: public class Time {


2: // private member variables
3: int Year;
4: int Month;
5: int Date;
6: int Hour;
7: int Minute;

20 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

8: int Second;
9:
10: // constructor
11: public Time(System.DateTime dt) {
12: Year = dt.Year;
13: Month = dt.Month;
14: Date = dt.Day;
15: Hour = dt.Hour;
16: Minute = dt.Minute;
17: Second = dt.Second;
18: }
19:
20: // public methods
21: public void DisplayCurrentTime() {
22: System.Console.WriteLine("{0}/{1}/{2} {3}:{4}:{5}",
23: Month, Date, Year, Hour, Minute, Second);
24: }
25:
26: }
27:
28: class LatKonstruktor {
29: public static void Main(string[] args) {
30: DateTime currTime = DateTime.Now;
31: Time t = new Time(currTime); //memanggil constructor
32: t.DisplayCurrentTime();
33: }
34: }

Initializer

Pada C# anda bisa menginisialisasi variabel dalam class secara langsung tanpa harus
mengisialisasi-nya lewat konstruktor.

1: public class Time


2: {
3: // private member variables
4: int year;
5: int month;
6: int date;
7: int hour;
8: int minute;
9: int second = 30; //initializer
10: }

“This” Keyw ord

T his keyword digunakan untuk mengakses instan class / objek itu sendiri, penggunaan keyword this
diperlukan untuk membedakan pengaksesan class variabel dan method variabel yang mempunyai
nama yang sama.

1: public class Time {


2: // private member variables, class variable
3: int year;
4: int month;
5: int date;

21 of 22 20/01/2017 10:46
C# | and1siahaan90 https://and1siahaan90.wordpress.com/category/programming/c/

6: int hour;
7: int minute;
8: int second = 30;
9:
10: public void SetTime(year, month, date, newHour, newMinute, newSecond) {
11: this.year = year; // penggunaan "this" dibutuhkan
12: this.month = month; // dibutuhkan
13: this.date = date; // dibutuhkan
14: this.hour = hour; // penggunaan "this" optional
15: this.minute = newMinute; // optional
16: second = newSecond; // optional
17: }
18: }

Static dan Instance Member

Field, property, dan method dalam suatu class bisa merupakan instance member atau static member.
Instance member dibentuk ketika class tersebut dibuat instan-nya, secara default field, property, dan
method yang tidak diberi keyword static merupakan instance member.

Static member tidak berhubungan dengan instan class melainkan langsung berhubungan dengan class
tersebut. Dengan menggunakan keyword static anda dapat mengakses field, property, atau method
pada suatu class tanpa harus membuat instan class-nya.

1: public class Kucing {


2: private static int instances = 0;
3: public Kucing() {
4: instances++;
5: }
6: public static void BanyakKucing() {
7: Console.WriteLine("Banyak Kucing : {0}", instances);
8: }
9: }
10:
11: class StaticMember {
12: public static void Main(string[] args) {
13: Kucing meong1 = new Kucing();
14: Kucing.BanyakKucing();
15: Kucing meong2 = new Kucing();
16: Kucing meong3 = new Kucing();
17: Kucing.BanyakKucing();
18: }
19: }

Posted by andysiahaan on June 23, 2011 in C # Leave a comment

22 of 22 20/01/2017 10:46

Anda mungkin juga menyukai