Object Oriented Programming in C# (Part2)

Pada Turtorial kedua ini akan dibahas beberapa topik yaitu:

  • Destroy Object
  • Overloading Method
  • Enkapsulasi Data dengan Property
  • Passing Value Type By Reference

Destroy Object

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: {
   3:   // perintah disini
   4: }

Sintaks diatas akan diterjemahkan oleh compiler sebagai berikut

   1: protected override void Finalize()
   2:     {
   3:        try
   4:        {
   5:            // do work here
   6:        }
   7:        finally
   8:        {
   9:             base.Finalize();
  10:        }
  11:     }

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 collector pada CLR. Untuk men-destroy objek secepat mungkin setelah tidak diperlukan lagi anda dapat menggunakan interface Idisposable

   1: using System;
   2:     class Testing : Idisposable //menggunakan interface IDisposable
   3:     {
   4:        bool is_disposed = false;
   5:        protected virtual void Dispose( bool disposing )
   6:        {
   7:           if ( !is_disposed ) // hanya mendispose objek sekali!
   8:           {
   9:              if ( disposing )
  10:              {
  11:                 Console.WriteLine( "Not in destructor,
  12:                 OK to reference other objects" );
  13:              }
  14:              Console.WriteLine( "Disposing..." );
  15:           }
  16:           this.is_disposed = true;
  17:        }
  18:
  19:        public void Dispose( )
  20:        {
  21:           Dispose( true );
  22:           // memanggil Garbage Collector
  23:           GC.SuppressFinalize( this );
  24:        }
  25:
  26:        ~Testing( )
  27:        {
  28:           Dispose( false );
  29:           Console.WriteLine( "In destructor." );
  30:        }
  31:     }

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

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

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 ?.

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: public class Time
   2:    {
   3:
   4:       // private member variables
   5:       private int year;
   6:       private int month;
   7:       private int date;
   8:       private int hour;
   9:       private int minute;
  10:       private int second;
  11:
  12:       // membuat property
  13:       public int Hour
  14:       {
  15:          get // mengambil nilai variable Hour
  16:          {
  17:             return hour;
  18:          }
  19:
  20:          set // memberi nilai variable Hour
  21:          {
  22:             hour = value;
  23:          }
  24:       }
  25:
  26:       // public  methods
  27:       public void DisplayCurrentTime( )
  28:       {
  29:          System.Console.WriteLine(
  30:          "Time: {0}/{1}/{2} {3}:{4}:{5}",
  31:          month, date, year, hour, minute, second );
  32:       }
  33:
  34:
  35:       // constructors
  36:       public Time( System.DateTime dt )
  37:       {
  38:          year = dt.Year;
  39:          month = dt.Month;
  40:          date = dt.Day;
  41:          hour = dt.Hour;
  42:          minute = dt.Minute;
  43:          second = dt.Second;
  44:       }
  45:
  46:
  47:    }
  48:     class Tester
  49:     {
  50:         public void Run()
  51:         {
  52:             System.DateTime currentTime = System.DateTime.Now;
  53:             Time t = new Time(currentTime);
  54:             t.DisplayCurrentTime();
  55:
  56:             // mengambil nilai variable Hour, get dijalankan
  57:             int theHour = t.Hour;
  58:
  59:             // menampilkan isi variable Hour
  60:             System.Console.WriteLine("Retrieved the hour: {0}",
  61:             theHour);
  62:
  63:             // increment
  64:             theHour++;
  65:
  66:             // memberi nilai variabel Hour dengan nilai baru
  67:             // set dijalankan
  68:             t.Hour = theHour;
  69:
  70:             // menampilkan isi variabel Hour setelah di-increament
  71:             System.Console.WriteLine("Updated the hour: {0}", t.Hour);
  72:         }
  73:
  74:
  75:         static void Main()
  76:         {
  77:             Tester t = new Tester();
  78:             t.Run();
  79:         }
  80:     }

Passing Value Type By Reference

Secara default di C# pengiriman nilai ke method menggunakan pass by value atau hanya mengirimkan nilai saja ke method seperti contoh dibawah ini

   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:
  12:         // public accessor methods
  13:         public void DisplayCurrentTime()
  14:         {
  15:             System.Console.WriteLine("{0}/{1}/{2} {3}:{4}:{5}",
  16:             Month, Date, Year, Hour, Minute, Second);
  17:         }
  18:
  19:         public void GetTime(int theHour, int theMinute, int theSecond)
  20:         {
  21:             theHour = Hour;
  22:             theMinute = Minute;
  23:             theSecond = Second;
  24:         }
  25:
  26:         // constructor
  27:         public Time(System.DateTime dt)
  28:         {
  29:
  30:             Year = dt.Year;
  31:             Month = dt.Month;
  32:             Date = dt.Day;
  33:             Hour = dt.Hour;
  34:             Minute = dt.Minute;
  35:             Second = dt.Second;
  36:         }
  37:
  38:
  39:     }
  40:
  41:     class Tester
  42:     {
  43:         public void Run()
  44:         {
  45:             System.DateTime currentTime = System.DateTime.Now;
  46:             Time t = new Time(currentTime);
  47:             t.DisplayCurrentTime();
  48:
  49:             int theHour = 0;
  50:             int theMinute = 0;
  51:             int theSecond = 0;
  52:             t.GetTime(theHour, theMinute, theSecond);
  53:             System.Console.WriteLine("Current time: {0}:{1}:{2}",
  54:             theHour, theMinute, theSecond);
  55:
  56:         }
  57:
  58:         static void Main()
  59:         {
  60:             Tester t = new Tester();
  61:             t.Run();
  62:         }
  63:     }

Jika kode diatas dijalankan hasilnya adalah

   1: 7/1/2008 12:22:19
   2: Current time: 0:0:0

Anda dapat melihat bahwa method t.GetTime(theHour, theMinute, theSecond); mencetak output 0:0:0 ini menandakan bahwa nilai yang dikirimkan ke method tersebut tidak dikembalikan ke variabel pemanggil methodnya (theHour, theMinute, theSecond). Jika anda ingin mengembalikan nilai ke variabel pemanggilnya maka anda harus menggunakan keyword ref. Penggunaan pass by ref pada method dapat dilihat pada contoh dibawah ini

   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:
  12:         // public accessor methods
  13:         public void DisplayCurrentTime()
  14:         {
  15:             System.Console.WriteLine("{0}/{1}/{2} {3}:{4}:{5}",
  16:             Month, Date, Year, Hour, Minute, Second);
  17:         }
  18:
  19:         // menggunakan references pada parameter
  20:         public void GetTime(
  21:            ref int theHour,
  22:            ref int theMinute,
  23:            ref int theSecond)
  24:         {
  25:             theHour = Hour;
  26:             theMinute = Minute;
  27:             theSecond = Second;
  28:         }
  29:         // constructor
  30:         public Time(System.DateTime dt)
  31:         {
  32:
  33:             Year = dt.Year;
  34:             Month = dt.Month;
  35:             Date = dt.Day;
  36:             Hour = dt.Hour;
  37:             Minute = dt.Minute;
  38:             Second = dt.Second;
  39:         }
  40:
  41:
  42:     }
  43:
  44:     class Tester
  45:     {
  46:         public void Run()
  47:         {
  48:             System.DateTime currentTime = System.DateTime.Now;
  49:             Time t = new Time(currentTime);
  50:             t.DisplayCurrentTime();
  51:
  52:             int theHour = 0;
  53:             int theMinute = 0;
  54:             int theSecond = 0;
  55:
  56:             // pass integer by reference
  57:             t.GetTime(ref theHour, ref theMinute, ref theSecond);
  58:
  59:             System.Console.WriteLine("Current time: {0}:{1}:{2}",
  60:             theHour, theMinute, theSecond);
  61:
  62:         }
  63:
  64:         static void Main()
  65:         {
  66:             Tester t = new Tester();
  67:             t.Run();
  68:         }
  69:     }

Jika program diatas dijalankan maka hasilnya

   1: 7/1/2008 12:25:41
   2: Current time: 12:25:41

bersambung ke Object Oriented Programming in C# (Part3)

pustaka: “Learning C# 2005”, Jesse Liberty, Brian MacDonald, O’Reilly 2006

Mengenal WPF (Windows Presentation Foundation)

Apa itu WPF?

WPF (Windows Presentation Foundation) adalah teknologi baru yang dirilis oleh Microsoft bersamaan dengan .NET Framework 3.0 (versi sekarang adalah 3.5). Selain WPF .NET 3.0 juga menyertakan beberapa teknologi baru yaitu WF (Workflow Foundation) untuk pemodelan dan WCF (Windows Communication Foundation) yang merupakan pengembangan dari Web Services.

WPF merupakan next generation graphic platform yang memungkinkan anda membuat advance UI (User Interface) yang memadukan document, media, 2D dan 3D, dan animation yang memiliki kemiripan dengan pemrograman web. WPF dapat digunakan pada platform windows seperti Win XP, Vista, dan Windows Server 2003 / 2008.

Sebelum ada teknologi WPF untuk mengembangkan aplikasi windows anda harus menggunakan beberapa teknologi yang berbeda, misalnya untuk menambahkan form user control seperti button kedalam aplikasi anda harus menggunakan komponen Windows Form, untuk menambahkan 2D Graphic anda harus menggunakan library GDI+, untuk 3D Graphic anda harus menggunakan library DirectX atau OpenGL.

WPF didesain untuk menyediakan solusi yang utuh untuk pengembangan aplikasi, WPF menyediakan integrasi dari teknologi yang berbeda, dengan WPF anda dapat menggabungkan komponen vector graphic, complex animation, dan media kedalam aplikasi. Fitur yang baru dalam WPF (.NET 3.5) adalah fitur 3D Graphic yang sudah built-in berbasis pada teknologi DirectX.

Apa saja yang harus diinstall?

Untuk menggunakan teknologi ini anda memerlukan beberapa software yang harus diinstall yaitu:

· Visual Studio 2008 / Visual C# Express 2008 (bagi pengguna C#) / Visual Basic 2008 Express (bagi pengguna vb). Visual Studio 2008 menggunakan .NET Framework 3.5 yang sudah support WPF yang terbaru saat ini. Vesi express edition dapat anda download di http://www.microsoft.com/express/download

· Microsoft Expression Blend 2.5 June 2008 Preview, anda juga dapat mendownload preview edition secara gratis.

XAML (Extensible Application Markup Language)

WPF menggunakan XAML untuk merepresentasikan UI dan user interaction. XAML dibangun dari XML dan penulisanya mirip dengan XHTML yang sering anda gunakan dalam membuat aplikasi berbasis web. XAML juga mendukung prinsip code-behind seperti pada aplikasi ASP.NET. Dengan menggunakan XAML, designer dan programmer dapat bekerja bersama dalam mengembangkan aplikasi, pertama designer membuat design UI kemudian programmer melanjutkan dengan menambah kodenya dalam bahasa yang disupport oleh .NET seperti C# / VB.NET.

Program sederhana menggunakan WPF

Setelah mengenal sekilas apa itu teknologi WPF, pada sesi ini anda akan mencoba membuat aplikasi sederhana menggunakan WPF. Anda dapat membuat aplikasi WPF langsung dari Visual Studio 2008, namun untuk membuat kreasi graphic yang lebih menarik anda dapat menggunakan Microsoft Expression Blend untuk membuat tampilan graphicnya baru kemudian diteruskan dengan menambahkan kode C# / VB.NET menggunakan Visual Studio 2008.

Langkah pertama buka Microsoft Blend Expression, klik File – New Project – Pilih WPF Application – beri nama projectnya “Kalkulator”, pilih bahasa pemrograman sesuai selera anda (C# atau VB).

Design tampilannya sesuai dengan selera anda, karena saya bukan seorang graphic designer maka saya kurang bisa membuat tampilan yang menarik, contoh ini hanya menunjukan kepada anda bahwa anda bisa mendesign tampilan dengan lebih leluasa dengan menggunakan Expression Blend sama sepert anda menggunakan Macromedia Flash atau Adobe Photoshop.

clip_image002

Tampilan yang anda design akan secara otomatis dikonversi kedalam format XAML, jika anda ingin melihat kode XAML klik di tab XAML disebelah kanan, maka akan tampak kode sebagai berikut (kode yang saya tulis pada listing dibawah ini hanya sebagian).

   1: <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   2:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   3:     x:Class="Kalkulator.Window1" x:Name="Window" Title="Window1" Width="362" Height="416">
   4: <Grid x:Name="LayoutRoot">
   5: <Image Margin="105.577,17,97.68,0" Source="actuallogo.png" Stretch="Fill" Height="60.66" VerticalAlignment="Top"/>
   6: <Image Margin="21,17,0,0" Source="erick.jpg" Stretch="Fill" Height="77.621" VerticalAlignment="Top" Width="79.333" HorizontalAlignment="Left"/>
   7: <Label Margin="21,111,57.107,0" VerticalAlignment="Top" Height="34" Content="SAMPLE KALKULATOR " FontSize="24" FontWeight="Bold">
   8: <Label.Foreground>
   9: <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
  10:         <GradientStop Color="#FF2662CA" Offset="0"/>
  11:         <GradientStop Color="#FFF81717" Offset="1"/>
  12:     </LinearGradientBrush>
  13: </Label.Foreground>
  14: </Label>
  15:     </Grid>
  16: </Window>

Jika anda perhatikan kode XAML yang digenerate oleh Expression Blend hampir mirip dengan XHTML yang biasa anda gunakan dalam membangun websites.

Setelah selesai mendesign tampilan di Expression Blend sekarang saatnya untuk menambahkan code-behind pada Visual Studio 2008. Buka aplikasi yang barusan anda buat dengan menggunakan Visual Studio, pilih New – Open Project – Kalkulator – kemudian isi property Name dari masing-masing property yang ada.

image

Kemudian tambahkan kode pada saat tombol diklik (event onClick). Tambahkan kode sebagai berikut:

clip_image004

   1: private void btnHitung_Click(object sender, RoutedEventArgs e)
   2:        {
   3:            int intBil1 = 0, intBil2 = 0, intHasil = 0;
   4:            intBil1 = Convert.ToInt32(txtBil1.Text);
   5:            intBil2 = Convert.ToInt32(txtBil2.Text);
   6:
   7:            if (rdTambah.IsChecked == true)
   8:            {
   9:                intHasil = intBil1 + intBil2;
  10:                MessageBox.Show("Hasil Penjumlahannya :" + intHasil.ToString());
  11:            }
  12:            else
  13:            {
  14:                intHasil = intBil1 + intBil2;
  15:                MessageBox.Show("Hasil Pengurangan : " + intHasil.ToString());
  16:            }
  17:        }

Untuk mencoba menjalankan aplikasinya tekan Ctrl+F5.

clip_image006

Contoh aplikasi diatas hanya merupakan contoh aplikasi yang sangat sederhana yang bisa dibangun menggunakan WPF. Aplikasi WPF juga dapat digunakan untuk mengembangkan aplikasi 3D graphic dan game.

Tutorial XHTML & CSS

Tutorial dan slide presentation ini berisi teori serta teknik dasar untuk design web menggunakan XHTML & CSS, bagi anda yang ingin belajar untuk membuat web dan ingin belajar menggunakan XHTML dan CSS dapat mendownload materinya disini.

semoga bermanfaat

Sumber : Internet & WWW How To Program, Prentice Hall, Inc 2003

salam,

Erick Kurniawan

Firefox 3 Lebih Cepat, Lebih Aman, Lebih Cerdas

Pada hari selasa tanggal 18 Juni 2008, browser paling populer didunia firefox meluncurkan versi terbarunya yaitu Firefox 3, pada hari itu juga Firefox 3 juga mencatat rekor dari Guiness Book yaitu slebih dari 5 juta orang mendownload Firefox 3, di Indonesia sendiri tercatat lebih dari 13000 download terjadi pada hari itu.

Pihak mozilla mengatakan bahwa firefox 3 akan lebih cepat, lebih aman, dan lebih cerdas dari versi sebelumnya. Beberapa fitur menarik yang ditambahkan pada Firefox 3 diantaranya.

Fasilitas One-Click Bookmarking

Dengan fasilitas ini anda dapat menambahkan dan mengatur bookmark dengan mudah. Untuk mengakses fasilitas tekan Ctrl+D atau klik tanda bintang dibagian address bar.

clip_image002

maka akan tampil window bookmark sebagai berikut

clip_image004

Anda dapat menambahkan folder untuk mengkategorikan bookmark anda, untuk pencarian yang lebih cepat anda juga dapat menambahkan tag, jika anda ingin mengunjungi situs yang sudah anda bookmark anda hanya perlu mengetikan tag-nya di address bar.

clip_image006

Smart Location Bar

Menurut saya ini adalah fasilitas yang sangat menarik, karena dapat memudahkan anda dalam pencarian situs tertentu, sekarang jika anda ingin menampilkan situs yang anda maksud anda harus mengetikan alamat lengkapnya, tetapi dengan fasilitas ini anda cukup mengetikan bagian informasi dari situs tersebut maka secara cerdas Firefox 3 akan menemukannya untuk anda.

clip_image008

Peningkatan Performa

Peningkatan Memory Management : Pada Firefox 3 ditambahkan fasilitas untuk pengaturan memory management yang lebih baik, dengan XPCOM cycle collector yang akan membersihkan memory yang sudah ditak digunakan lagi, ini akan dapat meningkatkan performa yang signifikan.

Faster JavaScript : Firefox 3 juga lebih mensupport pengembangan aplikasi web yaitu dengan JavaScript 1.8 yang meliputi expression closures, generator expression dan array reduce. Dengan demikian eksekusi script JavaScript akan lebih cepat.

Smaller Memory Footprint : Firefox 3 lebih sedikit menggunakan kapasitas komputer memory untuk menjalankan program.

Faster Paged Load : Firefox 3 mendesain kembali page rendering dan layout engine ini berarti anda akan dapat menampilkan halaman web dengan lebih cepat.

Graphics Engine Improvements : peningkatan text rendering untuk semua graphic engine pada Firefox 3.

Full Zoom

Failitas zoom yang dimiliki Firefox 3 sangat canggih, biasanya jika anda menggunaka zoom maka yang menjadi lebih besar hanya text-nya saja sedangkan untuk image tetap, dengan menggunakan Firefox 3 anda dapat melakukan zoom untuk text maupun image. Cara melakukan zoom-in dengan menekan Ctrl++, untuk zoom out menggunakan Ctrl+-.

Platform-Native Look & Feel

Firefox 3 juga menyesuaikan tampilannya sesuai dengan platform sistem operasi anda, jika anda menggunakan Windows XP, Windows Vista, atau Linux maka tampilannya akan berbeda pula.

Add-ons Manager

Sekarang anda menggunakan add-on manager untuk mengatur dan menginstall add-ons pada browser anda, dengan menggunakan fasilitas ini pengaturan add-on menjadi lebih mudah

clip_image010

Instan Web Site ID

Anda ingin memastikan bahwa website yang anda kunjungi aman untuk bertransaksi, maka Firefox 3 akan memberikan informasi tentang website tersebut.

clip_image012

Password Manager

Firefox 3 mempunyai fasilitas yang dinamakan password manager untuk “mengingat” password anda pada situs-situs tertentu yang membutuhkan password. Sekarang anda tida akan diganggu dengan messagebox yang menanyakan apakah mau menyimpan password seperti versi sebelumnya, browser hanya akan menampilkan notification disebelah atas browser.

clip_image014

LINQ pada .NET 3.5

LINQ (Language Integrated Query) adalah feature baru pada .NET 3.5 yang cukup banyak mendapat perhatian dari para developer saat ini. Apa saja yang bisa dilakukan dengan LINQ? Jika anda ingin mengetahuinya lebih jauh anda dapat mendownload presentation dari Luca Bolognese, LINQ Lead Program Manager dan

Michael Pizzo Software Architect Data Programmability, Microsoft Corporation. slide presentasi mereka dapat di download pada link dibawah ini: