Kamis, 13 Desember 2012

Kesalahan Umum yang Sering Dilakukan Programmer

» Kesalahan Umum yang Sering Dilakukan Programmer
"Om Swastiastu"


Untuk menjadi seorang programmer, diperlukan proses pematangan yang memakan waktu cukup lama. Kita semua tidak bisa langsung saja menjadi programmer yang matang. Saya sendiri telah melalui beberapa proses tersebut. Ketika membandingkan diri saya dengan saya setahun yang lalu dengan yang sekarang, rasanya banyak sekali hal yang telah saya pelajari. Saya yang tidak tahu apa-apa tentang Web Programming sekarang tiba-tiba saja sudah menguasainya. Walau masih banyak hal yang mesti saya pelajari.

Nah, selama setahun ini saya sudah mempunyai sedikit banyak pengalaman dalam sebuah proyek atau lebih. Dari proyek ke proyek ilmu yang saya dapatkan semakin banyak. Pengalaman juga bertambah, kecepatan saya menganalisa masalah semakin terasah. Tetapi sebagai seorang manusia biasa, kadang saya masih melakukan kesalahan-kesalahan kecil.



Berikut adalah beberapa kesalahan kecil umum yang sering dilakukan seorang programmer.

  • Lupa memberikan tanda titik koma atau semi colon ( ; ) diakhir kode.
    • Setiap mengetikkan perintah pada suatu baris, maka diakhir baris tersebut kita harus mengetikkan tanda titik koma atau semi colon tersebut. Hampir setiap bahasa pemrograman pasti membutuhkan tanda titik koma diakhir setiap barisnya, dan kita sebagai programmer kadang-kadang lupa untuk memberikannya.
  • Tidak memberikan tanda kurung kurawal tutup ( } ).
    • Ketika kalian membuat suatu kondisi menggunakan if atau membuat sebuah fungsi atau class, maka kita perlu membuat kurung kurawal buka dan kurung kurawal tutup. Ini sangat penting untuk mengetahui sampai mana saja isi dari sebuah fungsi, class atau suatu kondisi tersebut.
  • Query SQL yang kurang tepat.
    • Query dalam SQL tentu sangat penting ketika kita membuat sebuah program yang menggunakan database. Terkadang kita lalai sehingga query yang kita buat tidak tepat. Dan menghasilkan jumlah data yang tidak kita inginkan.
  • Tidak memberikan tag penutup pada kode HTML.
    • Dalam web programming, ada kode HTML yang memerlukan tag penutup dan ada juga yang tidak memerlukannya. Kadang ketika mebuat tag div kita lupa untuk memberikan tag penutupnya, sehingga halaman web yang dihasilkan tidak sesuai dengan harapan kita.
Saya kita masih banyak lagi kesalahan-kesalahan kecil yang dilakukan seorang programmer. Waktu pertama kali belajar, entah berapa kesalahan yang sudah saya buat sampai akhirnya saya bisa menjadi seperti sekarang. Ingat programmer juga manusia biasa, tidak luput dari kesalahan, asal kita mau belajar dari kesalahan yang telah kita buat, maka kelak kita akan menjadi seorang programmer yang terampil. Tanpa kesalahan atau kegagalan, kalian tidak akan mungkin bisa menjadi programmer yang terampil dan handal. Semoga anda semua sukses selalu.

pemrograman C++



Halo kawan-kawan semua, ada yang ingin belajar bahasa pemrograman C++? Blog ini berisi banyak artikel serta contoh syntax program dalam pemrograman C++. Semuanya dikemas dalam bentuk scroll bar yang dapat Anda lihat sebelah kanan bagian blog ini. Blog ini memberikan ilmu dasar sampai tahap menengah pemrograman C++. Anda dapat memulainya dengan mendownload compiler C++ yang sudah saya berikan download linknya, yaitu Borland C++, dan Visual C++ 2005. Setelah diberikan compiler yang mana merupakan syarat utama dalam mempelajari bahasa pemrograman C++, kalian juga akan diberikan materi dari dasar beserta contoh syntax programnya. Sehingga diharapkan kalian bisa memahami dasar pemrograman C++ dan dapat menerapkannya menjadi pada kehidupan sehari-hari.

Pada artikel kali ini, saya tidak akan memberikan contoh syntax program C++ atau materi. Saya hanya ingin mendeskripsikan fungsi dan guna blog ini saya buat. Berbagi ilmu pemrograman kepada dunia. Saya harap apa yang saya berikan kepada kalian dalam blog ini dapat bermanfaat dalam menambah wawasan kalian. Saya sendiri masih seorang mahasiswa di salah satu PTS Bali. Saya juga belum menguasai betul pemrograman C++, disini saya hanya membagi ilmu yang sudah saya mengerti atau paling tidak saya mengerti konteks materi tersebut. Jadi mohon maaf apabila ada kesalahan syntax dan sejenisnya. Tapi, tentu saja saya tidak memberikan ilmu tanpa dicoba terlebih dahulu. Apa yang saya posting disini tentu sudah dicoba sebelumnya untuk menghindari kesalahan syntax. Selain C++, saya juga memberikan tutorial SQL. Dan rencana kedepannya, saya akan memberikan tutorial Java dan Visual Basic 2008. Mudah-mudahan lebih banyak bahasa pemrograman lainnya yang bisa saya berikan. Sekian untuk artikel kali ini. Terimakasih ^_^

Getting Set Up - C++ Compilers


Hal pertama yang perlu Anda lakukan, sebelum memulai di C + +, adalah untuk memastikan bahwa Anda memiliki sebuah kompiler. Apa compiler, Anda bertanya? Sebuah compiler mengubah program yang Anda tulis ke sebuah executable bahwa komputer Anda benar-benar dapat memahami dan menjalankan. Jika Anda mengambil kursus, Anda mungkin memiliki satu diberikan melalui sekolah Anda. Jika Anda mulai keluar pada Anda sendiri, Anda terbaik adalah dengan menggunakan Code:: Blocks dengan MinGW. Jika Anda di Linux, Anda dapat menggunakan g + +, dan jika Anda pada Mac OS X, Anda dapat menggunakan Xcode

Tutorial Visual C++


Berikut ini adalah kumpulan tutorial C++ yang bisa anda download dan pelajari. Dari BAB 1 – Habis. Silakan didownload untuk mempelajarinya.
Berikut ini adalah link dan penjelasannya:
Chapter I – II.C/C++ introduction, OOP (object oriented programming), C++ compiler, Hello Worlds…, main(), statements, header file, clearing the screen, writing comments. [download]
Chapter III
C++ basic elements: identifier, data types, variable declaration, const, assignment. [download]
Chapter IV-V
Operator, statement, input, output [download]
Chapter VI
Control statements: IF, SWITCH, FOR, WHILE, DO WHILE [download]
Chapter VII-VIII
Functions, String [download]
Chapter IX-X
Array, Struktur [download]
Chapter XI
Materi: Operasi File [download]
Chapter XII
Class [download]

Using Frames (I)

We are going to see what Frames are and when they must be used. We will also see how to insert a simple frame into a website and how to work with it.

Introduction
 
Frames are used to distribute the data in a web site. They help to keep some parts straight such as they are, as the logotype and the browser bar, while the others can change.
In addition they usually improve the appearance.
Each page's frame has its own HTML file. For example, in the image on the right you can see a page with two frames. The left frame has the menu.htm file, and the right frame has the dogs.htm file.
To see the page this way, we have opened the browser's file frames.htm, which is the page that has grouped the frames.
It is possible to edit the frame's files from the page that containts the set of frames. This simplifies the work as it is easier to figure what the final page is going to look like.
This is something that you cannot do if you edit each framed file individualy.
Working with frames can be a bit complicated, and even more so in the begining. We are not going to go too much into the theme, and we will only look at some of the basic concepts with a few easy examples.

Creating frames
There are many ways of creating a frame. We will only learn one.
To create a frame, you first need to open a file. It can be new or an existing one.
After this, you need to go to the Insert menu, HTML, and Frames. Through this option you can select the type of frame you want to create.
We are going to look at the Left frame option.
If we click on Left, a new frame will be created in the left side of the current file.


As you can see in the image, there is a line splitting the document.
In this case we will have three files: the left one, the right one, and the one which has the set of frames. The right one is the file we had at the start. It is in the frame known as Main Frame.
To select the file that has the set of frames you have to click on the line that splits the frames. This is only possible in case of not having been previously saved.

In case of inserting a right frame instead of a left frame, the empty frame will be shown to the right of the original file.
In this image you can see an example of a right frame.
A right frame has been inserted over an existing file, menu.htm.
As in the previous case, we have three files: the left, the right, and the one which has the set of frames. In this case the file we had at the begining is the left one, while the previous was the right one. For this reason Main frame will be at the left.
Main frame is the frame that is always in the initial file, into which the rest of the frames have been inserted.

Setting Up Your Website in Dreamweaver


Start up Dreamweaver.
Picture of Dreamweaver CS3 at startup You will be greeted with a window with a top-half looks something like the picture above (without the words "Dreamweaver Tutorial thesitewizard.com" of course). Your picture may be slightly different depending on whether you are using Mac OS X, Windows XP or Windows Vista.
If you look at the top part of the window, you will see a menu bar that reads "File Edit View Insert Modify Text Commands Site Window Help". We will be accessing a lot of Dreamweaver's features via this menu bar.
The first thing you will need to do is to define your site in Dreamweaver's Site Manager. Click the "Site" menu item on the menu bar. A drop-down menu will appear. Click the "New Site..." item in the menu bar.
Important note: in the interest of brevity, in the future, I shall refer to the sequence of clicking the "Site" menu, followed by clicking on the "New Site..." item simply as "Site | New Site..."
A dialog box will appear with words to the effect "Site Definition for Unnamed Site 1". The number that follows the word "Site" may be different if you have ever used Dreamweaver to set up a site before. Don't worry about that. We are about to change it anyway.
At the top of the dialog box is the "Basic" tab. If it is not currently selected, click on it to select it. If you're not sure, just click on it.
In the edit box for "What would you like to name your site?", type in the name you wish to give to your site. If you are not sure what name you want for your site, use your domain name. For example, if you have purchased a domain called "example.com", put "example.com" (without the quotes) into the box. For the purpose of this tutorial, I will assume that you have typed "Example Company" in the box.
Once you have done the above, enter the web address of your site in the box following the question "What is the HTTP Address (URL) of your site?". For example, if you bought the domain "example.com", your website address will be "http://www.example.com/" (without the quotes), unless your web host tells you otherwise.
Click the "Next" button at the bottom of the window to proceed to the next screen.
Accept the default "No, I do not want to use a server technology" for now. Click the "Next" button again.
The next screen allows you to define where Dreamweaver saves the files you create. The default is to place the files in a folder with the same name as your website. You can change the location if you wish. Note that this folder merely determines where on your computer the website files are saved. You will be taught how to publish those files to your web host in a later step. It is always good practice to keep a copy of your website on your own computer. If you don't know what to do here, just accept the default.
When you click "Next", you will be asked "How do you connect to your remote server?". For now, select "None" in the drop-down box and click "Next" again. You will then be given a "Site Definition" summary. Click "Done".

Creating a Simple Two-Column Web Page with Header and Footer

You will now create the main page of your website. For the purpose of this tutorial, we will be creating a two-column web page for the main page. A two-column web page basically means that the page will have two vertical columns. Websites typically use one of the columns to hold the website's logo and navigation buttons and the other column to hold the main content. For example, on thesitewizard.com's article pages, such as the one you are reading now, the left column holds the navigation menu while the right column holds the article text.
Click "File | New". That is, click the "File" menu followed by the "New" item on the menu that appears. A new window entitled "New Document" will appear.
Picture of New Document window in Dreamweaver Look in the "Layout" column in the window that appears and locate the item "2 column liquid, left sidebar, header and footer". Select the item by clicking on it once.
Look at the rightmost side of the same window and locate the item "Layout CSS". Click the drop-down box and select "Create New File". This will cause Dreamweaver to save certain types of information about the appearance of the web page (called CSS) in a separate file. One of the ways in which this is useful is that when we design other pages of the site, we can reuse the same information by simply loading it from the same file.
Click the "Create" button.
A dialog box entitled "Save Style Sheet As" appears. Accept the default name and location by simply clicking the "Save" button.
Dreamweaver now presents you with a page with two columns with some dummy content typed in. We will be replacing some of the dummy content with our own content.

Designing the Home Page: Preamble

The page you are about to design will serve as the website's "Home Page", which means that it is the main page of your website. It is the page that visitors will see if they type your website's address without specifying any page name. For example, if your domain is called "example.com", and your visitor types "http://www.example.com", they will see this page.
A home page typically contains brief information about what the site is about as well as links to the other pages of your website. If this is the home page of your personal site, you will probably want to welcome your visitors and mention briefly what they can hope to see on your site. If this is the home page of a company site, it will typically mention briefly what the company sells, it's main products and point the visitors to individual product pages or other pages on your site.
For the purpose of this tutorial, I will provide example text for a fictitious company called "Example Company", selling some fictitious products. You should of course use your own text rather than my supplied text. For example, if your company is called XYZ Inc, go ahead and use "XYZ Inc" in places where I use "Example Company". Likewise if you are creating a personal website, and you are out of ideas as to what to call your site, call it by your name. For example, if your name is Shakespeare, call it Shakespeare's Website.

Dreamweaver CS3

  1. Dreamweaver CS3

    You will need Dreamweaver CS3 (obviously). The tutorial assumes that you are using Dreamweaver CS3. There are versions of Dreamweaver for both Windows and Mac OS X — either version will do fine. For the most part, both versions work in the same way.
    Note: if you are using Dreamweaver CS4, please see my other tutorial series Dreamweaver CS4 Tutorial instead. The latter was written specifically for that version of Dreamweaver, and takes advantage of some of its newer features. Likewise, Dreamweaver CS5.5 users should read the Dreamweaver CS5.5 Tutorial and Dreamweaver CS5 users the Dreamweaver CS5 Tutorial.
  2. A Web Hosting Account

    You will need a web host to publish your pages to. For the complete beginner, a web host is (loosely speaking) a company which has computers that are permanently connected to the Internet. After you design your web page(s), you will need to transfer your pages to your web host's computer (called a web server), so that the rest of the world can see it. There are numerous web hosts around — you can find a list of cheap web hosts on http://www.thefreecountry.com/webhosting/budget1.shtml
There are other things involved in getting your first web site up and running, such as getting your own domain name, making your website search engine friendly and promoting your web site. This tutorial however does not deal with those matters — it is strictly about designing (creating) and publishing (uploading) your website using Dreamweaver. If you are a total beginner, you may want to consult my article How to Start / Create Your Own Website: The Beginner's A-Z Guide for an overview of the entire process and all the things you will need.

Overall Goals of the Dreamweaver Tutorial

By the end of this tutorial, you will have set up a working website with multiple pages, including a main page, a feedback form, an About Us page, and a Site Map. Your pages will contain a sophisticated navigation menu bar, images, multiple columns, a form, links to other pages within your site, links to other sites, text in different font sizes, etc. In other words, you will have a fully functional website.
More importantly, you will know how to use Dreamweaver to create, design and publish your site so that you can design new sites any time you want.

WEB DESAIN DREAMWEAVER

 Kumpulan Tutorial dan belajar ilmu website mulai dari hosting dan coding seperti belajar HTML, CSS, Javascript, Javascript, JQuery, ASP.Net hingga SEO dan Desain web dengan Dreamweaver dan Photoshop untuk mempercantik halaman website Membuat Drop Down Menu Sederhana di Website
Publish: 7 Juni 2012 | Author & Copyright: Johan | Status: FREE tutorial
drop down menu
Pada tutorial Dreamweaver kali ini saya akan mencoba memberikan penjelasan bagaimana cara membuat drop down menu yang simple dan sederhana agar bisa dan mudah dipelajari
Selengkapnya...

Pengenalan JQuery Website
Publish: 16 Mei 2012 | Author & Copyright: Mifta Afina | Status: FREE tutorial
floating top
Setelah menjamurnya konsep blogazine pada blog, jQuery sekarang telah menjadi bahan wajib bagi web desainer maupun blogger. Sebenarnya apa itu jQuery?
Selengkapnya...

Membuat Server Lokal pada Laptop atau PC
Publish: 13 Mei 2012 | Author & Copyright: Johan | Status: FREE tutorial
xampp
Pada tutorial Website kali ini kita akan sedikit belajar tentang bagaimana cara membuat komputer atau laptop kita menjadi sebuah server
Selengkapnya...

Floating Back To Top Page
Publish: 3 April 2012 | Author & Copyright: Johan | Status: FREE tutorial
floating top
Pada Tutorial Dreamweaver dan HTML kali ini saya akan menjelaskan bagaimana cara membuat flating Back To Top Page kalau dalam bahasa Indonesianya adalah Tombol melayang
Selengkapnya...

Menu - Menu Animasi Menarik di Dreamweaver
Publish: 5 Agustus 2011 | Author & Copyright: Johan | Status: FREE tutorial
tutorial dreamweaver
Seorang Web desainer pasti akan melakukan segala cara untuk membuat tampilan websitenya menarik, salah satunya mungkin dengan cara membuat menu animasi.
Selengkapnya...

BELAJAR Membuat WEBSITE - Basic HTML
Publish: 20 Desember 2010 | Author & Copyright: Johan | Status: FREE tutorial
tutorial dreamweaver
Bagaimana cara membuat website? Ada beberapa tahapan dan langkah yang harus kita lalui untuk membuat sebuah Website yang baik. Lain halnya dengan instan CMS maupun instan blog yang kita tinggal mendaftar saja di penyedia layanan blog seperti Blogspot, Wordpress, dll. Maupun CMS seperti Joomla, Mambo, dll yang tinggal instal saja seperti. Disini kita belajar manual web (membuat website secara manual)
Selengkapnya...

Membuat Rollover Image
Publish: 1 Mei 2010 | Author & Copyright: DJ Afran | Status: FREE tutorial
tutorial dreamweaver
Hai jumpa kembali di Tutorial Dreamweaver mempercantik halaman website kita dengan kolaborasi CSS dan dreamweaver.
Selengkapnya...

Memasukkan Video Youtube ke Website
Publish: 09 April 2009 | Author & Copyright: Johan | Status: FREE tutorial
tutorial dreamweaver
Hai jumpa kembali di Tutorial Dreamweaver kali ini kita akan menambahkan atau memasukkan video dari youtube ke website buatan kita. Siapa yang tidak mengenal Youtube...
Selengkapnya...

Memasukkan Animasi Flash Ke Dalam Website
Publish: 24 Februari 2009 | Author & Copyright: Johan | Status: FREE tutorial

Pada tutorial belajar Dreamweaver kali ini penulis akan menjelaskan bagaimana cara memasukkan animasi flash berektension *.swf ke dalam website dengan dreamweaver...
Selengkapnya...

Pengenalan Dreamweaver dan Layout
Publish: 17 Februari 2009 | Author & Copyright: Johan | Status: FREE tutorial
logo dreamweaver
Karena banyaknya request dari sana sini dan situ aduh pokoknya dari mana - mana tentang web desain dengan Dreamweaver maka saya akhirnya melaunching tutorial Dreamweaver di ilmugrafis rubrik web desain...

Materi java merancang aplikasi teks dan dekstop berbasis obyek — Document Transcript


  • 1. Pemrograman Berorientasi Obyek JAVASejarah Singkat Perkembangan JAVA Proyek Java dimulai pada tahun 1991, ketika sejumlah insinyur perusahaan Sunyang dimotori oleh James Gosling mempunyai keinginan untuk mendesain sebuah bahasakomputer kecil yang dapat dipergunakan untuk peralatan konsumen seperti kotak tombolsaluran TV. Proyek ini kemudian diberi nama sandi Green. Keharusan untuk membuat bahasa yang kecil , dan kode yang ketat mendorongmereka untuk menghidupkan kembali model yang pernah dicoba oleh bahasa UCSD Pascal,yaitu mendesain sebuah bahasa yang portable yang menghasilkan kode intermediate. Kodeintermediate ini kemudian dapat digunakan pada banyak komputer yang interpreternyatelah disesuaikan. Karena orang-orang Sun memiliki latar belakang sebagai pemakai unix sehinggamereka lebih menggunakan C++ sebagai basis bahasa pemrograman mereka, maka merekasecara khusus mengembangkan bahasa yang berorientasi objek bukan berorientasiprosedur. Seperti yang dikatakan Gosling ”Secara keseluruhan, bahasa hanyalah sarana,bukan merupakan tujuan akhir”. Dan Gosling memutuskan menyebut bahasanya dengannama “Oak” (diambil dari nama pohon yang tumbuh tepat diluar jendela kantornya di Sun),tetapi kemudian nama Oak diubah menjadi java, karena nama Oak merupakan nama bahasakomputer yang sudah ada sebelumnya. Pada tahun 1994 sebagian besar orang menggunakan mosaic, browser web yangtidak diperdagangkan yang berasal dari pusat Supercomputing Universitas Illinois padatahun 1993.( Mosaic sebagian ditulis oleh Marc Andreessen dengan bayaran $6.85 per jam,sebagai mahasiswa yang melakukan studi praktek. Di kemudian hari ia meraih ketenaran sebagaisalah seorang pendiri dan pemimpin teknologi di netscape) Browser yang sesungguhnya dibangun oleh Patrick Naughton dan Jonathan Payne danberkembang ke dalam browser HotJava yang kita miliki saat ini. Browser HotJava ditulis dalamJava untuk menunjukkan kemampuan Java. Tetapi para pembuat juga memiliki ide tentang suatukekuatan yang saat ini disebut dengan applet, sehingga mereka membuat browser yang mampupenerjemahkan kode byte tingkat menengah. “Teknologi yang Terbukti” ini diperlihatkan padaSunWorld ‟95 pada tanggal 23 mei 1995, yang mengilhami keranjingan terhadap Java terusberlanjut.Kriteria “Kertas Putih” Java Penulis Java telah menulis pengaruh “Kertas Putih” yang menjelaskan tujuan rancangan dankeunggulannya. Kertas mereka disusun lewat 11 kriteria berikut :Sederhana (Simple) Syntax untuk Java seperti syntax pada C++ tetapi syntax Java tidak memerlukan headerfile, pointer arithmatic (atau bahkan pointer syntax), struktur union, operator overloading, classvirtual base, dan yang lainnya. Jika anda mengenal C++ dengan baik, maka anda dapat berpindah kesyntax Java dengan mudah tetapi jika tidak, anda pasti tidak berpendapat bahwa Java sederhana.Berorientasi Objek (Object Oriented) Rancangan berorientasi objek merupakan suatu teknik yang memusatkan rancangan padadata (objek) dan interface. Fasilitas pemrograman berorientasi objek pada Java pada dasarnyaadalah sama dengan C++. Feature pemrograman berorientasi objek pada Java benar-benarsebanding dengan C++, perbedaan utama antara Java dengan C++ terletak pada penurunanberganda(multiple inheritance), untuk ini Java memiliki cara penyelesaian yang lebih baik. -1–SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 2. Pemrograman Berorientasi ObyekTerdistribusi (Distributed) Java memiliki library rutin yang luas untuk dirangkai pada protokol TCP/IP sepetrti HTTPdan FTP dengan mudah. Aplikasi Java dapat membuka dan mengakses objek untuk segala macamNET lewat URL sama mudahnya seperti yang biasa dilakukan seorang programmer ketika mengaksesfile sistem secara lokal.Kuat (Robust) Java dimaksudkan untuk membuat suatu program yang benar-benar dapat dipercaya dalamberbagai hal. Java banyak menekankan pada pengecekan awal untuk kemungkinan terjadinyamasalah, pengecekan pada saat run0time dan mengurangi kemungkinan timbulnya kesalahan (error).Perbedaan utama antara Java dan C++ adalah Java memiliki sebuah model pointer yang mengurangikemungkinan penimpaan (overwriting) pada memory dan kerusakan data (data corrupt).Aman (Secure) Java dimaksudkan untuk digunakan pada jaringan terdistribusi. Sebelum sampai padabagian tersebut, penekanan terutama ditujukan pada masalah keamanan. Java memungkinkanpenyusunan program yang bebas virus, sistem yang bebas dari kerusakan.Netral Arsitektur (Architecture Neutral) Kompiler membangkitkan sebuah format file dengan objek arsitektur syaraf, programyang di kompile dapat dijalankan pada banyak prosesor, disini diberikan sistem run time dari Java.Kompiler Java melakukannya dengan membangkitkan instruksi-instruksi kode byte yang tidak dapatdilakukan oleh arsitektur komputer tertentu. Dan yang lebih baiik Java dirancang untukmempermudah penterjemahan pada banyak komputer dengan mudah dan diterjemahkan padakomputer asal pada saat run-time.Portabel (Portable) Tidak seperti pada C dan C++, di Java terdapat ketergantungan pada saat implementasi(implement dependent). ukuran dari tipe data primitif ditentukan, sebagaimana kelakuan aritmatikpadanya. Librari atau pustaka merupakan bagian dari sistem yang mendefinisikan interface yangportabel.Interpreter Interpreter Java dapat meng-eksekusi kode byte Java secara langsung pada komputer-komputer yang memiliki interpreter. Dan karena proses linking dalam Java merupakan proses yangkenaikannya tahap demi tahapdan berbobot ringan, maka proses pengembangan dapat menjadi lebihcepat dan masih dalam penelitian. Kinerja Yang Tinggi (High Performance) Meskipun kinerja kode byte yang di interpretasi biasanya lebih dari memadai, tetapi masihterdapat situasi yang memerlukan kinerja yang lebih tinggi. Kode byte dapat diterjemahkan (padasaat run-time) de dalam kode mesin untuk CPU tertentu dimana aplikasi sedang berjalan.Multithreaded Multithreading adalah kemampuan sebuah program untuk melakukan lebih dari satupekerjaan sekaligus. Keuntunga dari multithreading adalah sifat respons yang interaktif dan real-time.Dinamis Dalam sejumlah hal, Java merupakan bahasa pemrograman yang lebih dinamis dibandingkandengan C atau C++. Java dirancang untuk beradaptasi dengan lingkungan yang terus berkembang.Librari dapat dengan mudah menambah metode dan variabel contoh yang baru tanpa banyakmempengaruhi klien. Informasi tipr run-time dalam Java adalah langsung (straigtforward). -2–SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 3. Pemrograman Berorientasi Obyek Bagaimana Java Lebih Baik daripada C++ ? Prinsip dasar pembuatan Java adalah karena C++ ternyata tidak memenuhi janji sebagaipemrograman berorientasi objek. Jadi apa yang salah dari C++ sehingga Java harus dibuat ?Jawabannya sederhana, yaitu Kompatibilitas ke belakang ( backward compability). Kompabilitas kebelakang biasanya dikenal sebagai kemampuan yang menjamin keberhasilandengan membuat programmer belajar dengan cepat. Java menggunakan hampir semua konvensi yangidentik untuk deklarasi variabel, melewatkan parameter, operator dan pengaturan aliran. Sehinggadengan kata lain Java menambahkan bagian-bagian yang baik dari C++ dan menghapus bagian-bagianyang jelek dari C. Java jauh lebih baik dari C++ karena hal-hal yang tidak dimilikinya, sepertibeberapa contoh berikut:Variabel Global Para programmer menulis program dalam bahasa assembly, dan semua program yangdisimpan dalan punch card, penghubung alat pemrograman adalah variabel global, masalahnya,dengan menggunakan variabel blobal suatu fungsi dapat memberikan efek samping yang burukdengan mengubah keadaan global. Variabel global pada C++ adalah tanda sebuah program yang tidakdirancang cukup baik untuk enkapsulasi data dengan cara yang masuk akal. Pada Java, ruang penamaan global hanya hirarki class. Tidak mungkin menciptakan variabelglobal diluar semua class. Setidaknya penentuan keadaan global dibuat lebih jelas denganenkapsulasi dalam class. Contoh, system.out.println() sering digunakan dalam program Java. Iniadalah cara mengakses output standar global untuk interpreter Java.Goto Beberapa kemampuan yang digunakan sebagai cara cepat untuk menyelesaikan programtanpa membuat struktur yang jelas adalah pernyataan goto.Dalam C++ dikenal sebagai if-then-goto.Sebeleum C++ memasukkan penanganan eksepsi, goto sering digunakan untuk membuat perulangandidalam keadaan eksepsi. Java tidak memiliki pernyataan goto. Java menyediakan kata goto hanya untuk menjagaagar programmer tidak bingung menggunakannya. Java memiliki bagian break yang diberi label danpernyataan continue yang merupakan bagian dimana goto boleh dipergunakan. Penanganan eksepsiyang ampuh dan terdefinisi dengan baik pada Java menghilangkan kebutuhan perintah goto.Pointer Pointer atau address pada memori adalah kemampuan C++ yang paling ampuh juga palingberbahaya. Biasanya kesalahan terjadi karena “kurang satu tempat” atau rusaknya data yangdisimpan karena lokasi memori terakhir hancur.kesalahan ini merupakan salah satu kesalahanyangterburuk yang susah untuk diperiksa dan ditelusuri. Meskipun penanganan objek Java menggunakan pointer, bahasa Java tidak memilikikemampuan memanipulasi pointer secara langsung. Kita tidak dapat mengubah integer menjadipointer, menunjuk ulang sembarang address memori. Array merupakan objek yang didefinisikan,tidak berupa address dimemori.Di Java kita tidak dapat menulis sebelum akhir lokasi yangdisediakan untuk array.Alokasi Memori Kemampuan C++ yang sama berbahayanya dengan pengolahan matematis pointer adalahmanajemen memori. Manajemen memori di C dan C++ diwujudkan dengan keunggulan dan kelemahanfungsi library malloc() dan free(). Fungsi malloc, mengalokasikan jumlah tertentu memori (dalambyte), dan mengeluarkan address blok tersebut. Fungsi free, mengirimkan blok yang telahdialokasikan kepada sistem untuk penggunaan umum. Secara umum dapat menyebabkan kebocoranmemori yang mengakibatkan program berjalan semakin lama semakin lambat. -3–SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 4. Pemrograman Berorientasi Obyek Java tidak memiliki fungsi malloc dan free, karena setiap struktur data yang rumit adalahobjek, maka mereka dialokasikan dengan operator new, yang mengalokasikan ruang untuk objekpada „heap‟ memori. Memori yang disediakan disebut „heap‟ karena kita tidak perlu lagimemikirkannya sebagai penambahan address yang berstruktur linier. Jadi hanya berupa kumpulaninstan objek. Yang didapat dari fungsi new bukanlah address memori, melainkan hanya „pegangan‟untuk objek dalam heap.Tipe Data Yang Rapuh C++ mewarisi semua tipe data umum pada C. Tipe-tipe ini mewakili bilangan bulat danpecahan dengan berbagai rentang nilai dan ketelitian. Rentang nilai dan ketelitian tipe ini bervariasibergantung pada implementasi kompilernya. Javamemecahkan masalah ini dengan mengambil ukuran yang sesuai untuk semua tipenumerik dasar dan menyatukannya. Arsitektur tertentu akan mengalami kesulitan atau bekerjatidak optimal untuk meng-implementasikan tipe data yang bergantung hardware secara ketat padainterpreter Java yang diberikan, tetapi inilah satu-satunya cara untuk menjamin hasil yang dapatdibuat ulang pada platform hardware yang berbeda.Pemilihan Tipe (Type Casting) yang Tidak Aman Type Casting adalah mekanisme yang ampuh dalam C/C++ yang memungkinkan kita untukmengubah tipe suatu pointer secara sembarang. Mungkin kita sering melihat bentuk seperti ini : memset((void *)p, 0, sizeof (struct p))Penggunaan ini, walaupun tidak baik, tetapi cukup aman. Tentu saja dengan menganggap blok memoriyang ditunjuk oleh p sekurang0kurangnya sepanjang sizeof (struct p).ini harus digunakan dengansangat hati-hati karena tidak ada syarat untuk memeriksa apakah kita telah memilih tipe denganbenar. Penanganan objek Java mencakup informasi lengkap tentang class yang menjadi instanssuatu objek, sehingga dapat dilakukan pemeriksaan kompatibilitas tipe selama program berjalan,dan menghasilkan eksepsi jika terjadi kegagalan.Daftar Argumen Yang Tidak Aman C++ banyak disukai karena kemampuannya melewatkan pointerdengan tipe sembarang dalamdaftar argumen panjang-variabel yang dikenal sebagai varargs. Varargs adalah tambahan sederhanapada premis yang menyatakan bahwa sembarang address dapat dipetakan pada sembarang tipe,tugas pemeriksaan tipe diserahkan kepada programmer. Sangat menyenagkan jika Java memiliki cara yang aman terhadap tipe untukmendeklarasikan dan melewatkan daftar argumen panjang-variabel, tetapi sampai versi 1.0 belumada ketentuan seperti itu.File Header yang Terpisah Salah satu kemampuan yang patut dipertimbangkan adalah file header, dimana kita dpatamendeklarasikan prototipe class kita dan mendistribusikannya dengan kode biner implementasiclass yang telah di-compile. Kemampuan ini membuat lingkungan compiler C++ hampir tidak dapatdigunakan. C++ memiliki format file yang bergantung mesin untuk kode yang telah di-compile,sehingga informasi header dapat dibuat coresiden. Karena antarmuka programmer ke class yang di-compile dilakukan melalui file header-nya, maka kode yang telah di-compile sangat bergantung padaapa yang ada pada file header tersebut. Misalkan programmer yang senang berpetualang ingin meningkatkan akses pada beberapaanggota data private pada class yang telah di-compile. Yang harus dilakukan oleh orang tersebutadalah mengganti pengubah akses yang asalnya private menjadi public pada file header dan meng-compile suatu sub class dari class yang telah di-compile. Pada Java ini tidak mungkin terjadi, karenadi Java tidak ada file header. Tipe dan visibilitas anggota class dicompile ke dalam file class Java.Interpreter Java menjalankan pengaturan akses saat program berjalan, jadi sama sekali tidak adacara untuk mengakses variabel private dari luar suatu class. -4–SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 5. Pemrograman Berorientasi ObyekStruktur yang Tidak Aman C berusaha menyediakan enkapsulasi data melalui deklarasi struktur yang disebut struct,dan polimorfisme dengan mekanisme union. Dua gagasan ini menghasilkan batas tipis antarapenyesuaian bergantung mesin yang kritis dan berbahaya dengan batasan ukuran. Java tidakmemiliki konsep struct dan union , sebaliknya Java menyatukan konsep ini dengan class.Peng-hacker-an Preprocessor Untuk mewujudkan keinginan memiliki model yang jelas untuk ditulis oleh programmer,compiler C dan C++ menggunakan tool yang sama dengan yang digunakan pada masa-masa MACROassembler. Ini menghasilkan preprocessor C yang tugasnya mencari perintah khusus yang diawalitanda pagar (#).Preprocessor C sering digunakan untuk membangun program yang sangat sulitdibaca. Java mengatur agar kita dapat bekerja tanpa preprocessor, hanya bergantung pada katakunci final untuk mendeklarasikan konstanta yang sebelumnya dihasilkan dengan #define.QED Berasal dari bahasa latin Quod Erat Demonstrandum, yang berarti “Terbuktikan..!!!”. Hal-hal Tata BahasaProgaram Java adalah kumpulan spasi, komentar, kata kunci, identifier, literal, operator, danpemisah.Spasi Java adalah bahasa bebas bentuk. Tidak perlu mengatur tata letaknya agar dapat bekerja.Asalkan ada sekurang-kurangnya satu spasi, tab, atau baris baru diantara setiap token sebelumdisisipi operator atau pemisah lain.Komentar Ada beberapa bentuk :1. Komentar baris tunggal Diawali dengan tanda // dan diletakkan diakhir baris yang diberi komentar.2. Komentar baris banyak Diawali dengan tanda /* dan ditutup dengan */ semua diantara kedua tanda tersebut dianggap komentar dan akan diabaikan oleh compiler. contoh penulisan : /* * komentar……. * komentar…… */3. Komentar terdokumentasi Menggunakan piranti Javadoc, yang mennggunakan komponen compiler Java untuk secara otomatis menghasilkan dokumentasi antarmuka public suatu class. Aturan pembuatan komentar yang dapat diolah oleh Javadoc adalah : sebelum deklarasi class, method, dan variabel public harus digunakan komentar bertanda /** untuk menyatakan komentar dokumentasi, diakhiri dengan tanda */. Javadoc akan mengenali sejumlah variabel khusus yang didahului dengan tanda @ didalam bagian komentar. contoh penulisan : /** * komentar…. * komentar….. */ -5–SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 6. Pemrograman Berorientasi ObyekKata Kunci Simpanan (Keywords) Kata kunci simpanan adalah identifier khusus yang disimpan oleh bahasa Java untukmengendalikan bagaimana program didefinisikan. Kata kunci ini digunakan untuk mengenali tipe-tipe,pengubah, dan mekanisme pengaturan aliran program. Kata kunci ini hanya dapat digunakan untukfungsi tertentu dan tidak dapat digunakan sebagai identifier nama suatu variabel, class danmethod. Sampai denga Versi 1.0 terdapat 59 kata kunci seperti terlihat dalam tabel : abstract boolean break byte byvalue case cast catch char class const continue default do double else extends false final finally float for future generic goto if implement import inner instanceof s int interface long native new null operator outer package private protected public rest return short static super switch synchronize this throw throws transient true d try var void volatile whileIdentifier Bdigunakan untuk nama class, method, dan variabel. Suatu variabel dapat berupa urutantertentu huruf (besar atau kecil), angka, garis bawah, dan tanda dolar. Tidak boleh diawali olehangka dan bersifat case sensitive. Kelompok Java mengikuti aturan penamaan identifier untuk semua method public danvariabel instans dengan huruf awal kecil dan menandai bagian kata selanjutnya dengan huruf besar,misalnya nextItem, currentValue, getTimeOfDay. Untuk variabel provate dan lokal identifier akan berupa huruf kecil semua dikombinasikandengan garis bawah, misalnya next_val, temp_val. Untuk variabel final yang mewakili suatukonstanta, digunakan huruf besar semua, misalnya TOK_BRACE, DAY_FRIDAY.Literal Besaran konstanta pada Java dihasilkan dengan menggunakan literal yang mewakilinya.Setiap literal merepresentasikan nilai suatu tipe, dimana tipe itu sendiri menjelaskan bagaimanasifat nilai tersebut dan bagaimana penyimpanannya.Separator (Pemisah) Simbol Nama Fungsi () Kurung Digunakan untuk menghimpun parameter dalam definisi dan pemanggilan method, juga digunakan untuk menyatakan tingkatan pernyataan, menghimpun pernyataan untuk pengaturan alur program dan menyatakan tipe cast. {} kurung Digunakan untuk menghimpun nilai yang otomatis dimasukkan kedalam kurawal array, juga digunakan untuk mendefinisikan blok program, untuk cakupan class, method, dan lokal. [] kurung siku Digunakan untuk menyatakan tipe array, juga digunakan untuk membedakan nilai array. ; titik-koma pemisah pernyataan. , koma Pemisah urutan identifier dalam deklarasi variabel, juga digunakan untuk mengaitkan pernyataan didalam pernyataan for. . titik Dugunakan untuk memisahkan nama paket dari sub-paket dan class, juga digunakan untuk memisahkan variabel atau method dari variabel referensi. -6–SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 7. Pemrograman Berorientasi ObyekVariabel variabel adalah satuan dasar penyimpanan dalam program Java. Suatu variabeldidefinisikan dengan kombinasi identifier, tipe, dan cakupan. Bergantung pada tempat kitamendeklarasikannya, variabel dapat bersifat lokal atau sementara, misalnya didalam perulangan for,atau dapat juga berupa variabel instans yang dapat diakses oleh semua method dalam class.Cakupan lokal dinyatakan dalam kurung kurawal. Tipe Data Java merupakan contoh bahasa yang strongly typed language. Hal ini berarti bahwa setiapvariabel harus memiliki tipe yang sudah dideklarasikan. Terdapat 8 tipe primitif, 6 diantaranyaadalah tipe bilangan ( 4 tipe integer, 2 tipe floating point), 1 tipe karakter char, digunakanmengawa-sandi (encode) Unicode, dan 1 tipe boolean.Integer Tipe Tempat yang Jangkauan (inclusive) Diperlukan int 4 byte - 2.147.483.648 sampai 2.147.483.647 (hanya lebih dari 2 miliar) short 2 byte - 32.768 sampai 32.767 long 8 byte - 9.223.372.036.854.775.808L sampai 9.223.372.036.854.775.807L byte 1 byte - 128 sampai 127Floating Point Tipe Tempat Yang Jangkauan Dibutuhkan float 4 byte secara kasar 3,40282347E+38F ( 7 digit desimal signifikan) double 8 byte secara kasar  1,79769313486231570E+308 (15 digit desimal siignifikan)Char Tipe char menggunakan tanda kutip tunggal untuk menyatakan suatu char. Tipe char jugamenyatakan karakter dalam upaya mengawa-sandi unicode, yang merupakan kode 2-byte. Karakterunicode paling sering dinyatakan dalam istilah skema pengkodean hexadesimal yang dimulai dariu0000 sampai uFFFF. Selain karakter bebas (escape „ u „ yang menyatakan karakter unicode diJava terdapat juga b backspace u0008 t tab u0009 n linefeed u000a r carriage return u000d ” double quote u0022 ‟ single quote u0027 a backslash u005cBoolean Tipe boolean memiliki nilai true dan false. Tipe ini digunakan untul logical testing denganmenggunakan operator relasional. -7–SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 8. Pemrograman Berorientasi ObyekKonversi antar Nilai Numerik Operasi biner apapun pada variabel numerik dengan tipe yang berbeda dapat diterima dandiperlakukan dengan cara seperti dibawah ini :1. Jika tipe operand adalah double, maka yang lain juga akan diperlakukan sebagai double pada lingkup operasi tersebut.2. Jika operand adalah float, maka yang lain juga akan diperlakukan sebagai float.3. Jika operand adalaha long, maka yang lain juga akan diperlakukan sebagai long.konversi yang diijinkan adalah sebagai berikut : byte  short  int  long  float  doubleDimana kita dapat memberikan nilai variabel suatu tipe disebelah kiri ke tipe disebelah kanannya. OPERATORAssignment Operator ( = )Shorthand assignment operator Operator Usage Meaning += X += Y X=X+Y -= X -= Y X=X–Y *= X *= Y X=X*Y /= X /= Y X=X/Y %= X %= Y X=X%YArithmetic Operator Operator Operation + Addition - Subtraction * Multiplication / Division % ModuloBitwise Operator Operator Operation & AND | OR ^ XOR >> Shift Kanan << Shift Kiri >>> Shift Kanan isi dengan nolUnary Operator -8–SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 9. Pemrograman Berorientasi Obyek Operator Operation ~ Unary NOT - Minus ++ Increment -- DecrementRelational Operator Operator Operation == Equal To != Not Equal To > Greater Than < Less Than >= Greater or Equal To <= Less or Equal ToLogical Operator Operator Operation ! Short-circuit NOT && Short-circuit AND || Short-circuit OR ?: Operator ternary if-then-elsePreseden Operator Tertinggi () [] . ++ -- ~ ! * / % + - >> >>> << > >= < <= == != & ^ | && || ?: = op= Terendah -9–SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 10. Pemrograman Berorientasi Obyek CONTROL FLOWPercabangan if – else Bentuk if-else menyebabkan eksekusi dijalankan melalui sekumpulan keadaan boolean sehingga hanya bagian tertentu program yang dijalankan. Bentuk umum pernyataan if-else : if (boolean expression) statement 1; [else statement 2; ] Klausa else bersifat optional, setiap statement dapat berupa satu statement tunggal atau dapat berupa satu blok statement yang ditandai dengan tanda {} (kurung kurawal). Boolean expression dapat berupa sembarang pernyataan boolean yang menghasilkan besaran boolean. break Java tidak memiliki pernyataan goto. Penggunaan goto adalah untuk membuat percabangan secara sembarang yang membuat program sulit dimengerti dan mengurangi optimasi compiler tertentu. Pernyataan break pada Java dirancang untuk mengatasi semua kasus tersebut. Istilah break mengacu kepada proses memecahkan blok program. Proses tersebut memerintahkan runtime untuk menjalankan program dibelakang blok tertentu. Untuk dapat ditunjuk blok diberi nama/label. Break juga dapat digunakan tanpa label untuk keluar dari suatu loop dan pernyataan switch. Penggunaan break menunjukkan bahwa kita akan keluar dari sutu blok program. switch Pernyataan switch memberiikan suatu cara ubtuk mengirimkan bagian program berdasarkan nilai suatu variabel atau pernyataan tunggal. Bentuk umum pernyataan switch : switch (expression) { case value1 : Statement; break; case value2 : Statement; break; case valueN : Statement; break; default; } Expression dapat menghasilkan suatu tipe sederhana, dan setiap value yang disebutkan pada pernyataan case harus berupa tipe yang cocok. Pernyataan switch bekerja dengan cara membandingkan nilai expression dengan setiap nilai pada pernyataan case. Jika ada yang cocok maka urutan program yang ada di pernyataan case tersebut akan dijalankan, jika tidak ada yang cocok, program akan menjalankan default return Java menggunakan bentuk sub-routine yang disebut method untuk mengimplementasikan antarmuka prosedural ke class objek. Setiap saat dalam method dapat digunakan pernyataan return yang menyebabkan eksekusi mencabang kembali ke pemanggil method. - 10 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 11. Pemrograman Berorientasi ObyekPerulangan (Looping) Looping artinya mengulangi eksekusi blok program tertentu sampai tercapai kondisi untukmenghentikannya. Setiap perulangan memiliki 4 bagian : a. Inisialisasi, adalah program yang mengyiapkan bagian awal perulangan b. Badan program, adalah pernyataan yang ingin kita ulangi. c. Iterasi, adalah program yang sering digunakan untu penambahan atau penguranagn pencacah dan index. d. Terminasi, adalah pernyataan boolean yang diperiksa setiap kali selama perulangan dilaksanakan untuk melihat apakah perulangan sudah saatnya dihentikan. while While adalah pernyataan perulangan yang paling mendasar pada Java. Penggunaan pernyataan while akan menyebabkan rekursi pernyataan secara terus menerus selama pernyataan booleannya bernilai true. Bentuk umum dari pernyataan while : [initialization;] while (termination) { body program ; [iteration;] } do-while Penggunaan pernyataan do –while menyebabkan body program akan dieksekusi sekurang- kurangnya 1 kali walaupun pernyataan booleannya menghasilkan nilai false. Pemeriksaan terminasi dilaksanakan pada akhir program. Bentuk umum pernyataan do – while : [initialization;] do { body program; [iteration;] } while [termination]; for Pernyataan for adalah cara praktis untuk menyatakan suatu perulangan. Bentuk umum pernyataan for : for {initialization; termination; iteration ) body program; Jika keadaan awal tidak menyebabkan termination bernilai true maka pernyataan body program dan iteration tidak akan dijalankan. Pernyataan koma Kadang-kadang ada keadaan dimana kita ingin memasukkan lebih dari satu pernyataan inisialisasi atau terminasi, Java menyediakan cara lain untuk menyatakan beberapa pernyataan sekaligus. Penggunaan koma untuk memisahkan pernyataan di batasi hanya untuk digunakan didalam tanda kurung untuk pernyataan for. continue Pernyataan continue akan menghentikan iterasi yang bersangkutan tetapi program akan menjalankan sisa perulangan sampai dengan selesai. - 11 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 12. Pemrograman Berorientasi Obyek Class dan Object Beberapa orang pada awalnya, biasanya tidak memperhatikan perbedaan antara class danobject, mereka mencampuradukkan kedua istilah tersebut. Mari kita simak kode berikut : /* Di sini kita mendefinisikan sebuah class bernama NiceGuy. Simpan sebagai file NiceGuy.java dan compile file Tersebut. Anda akan mendapatkan file bernama NiceGuy.class */ public class NiceGuy { private string name; public NiceGuy(String name) { system.out.println(“Instantion of NiceGuy named “ + name) ; this.name=name; } public void sayHello() { system.out.println(“Hello Object Oriented World…!!!“ ) ; } public sayHelloOutLoud() { system.out.println(“HELLLOOOO OBJECT ORIENTED WORLD!!!”) ; } Public String getName() { Return name; } } Gambar 1. Definisiclass NiceGuy /* Di sini, kita membuat sebuah java application yang bernama OurFirstCode. Simpan source ini dalam file bernama OurFirstCode.java, di direktori yang sama dengan tempat anda menyimpan NiceGuy.java. Kemudian compile file tersebut, Anda akan Mendapatkan file OurFirstCode.class. Lalu jalankan aplikasi ini dengan mengetikan java OurFirstCode pada command line */ public class OurFirstCode { public static void main(String[] args) { NiceGuy ng= new NiceGuy (“ButtHead”); ng.sayHello(); ng.sayHelloOutLoud(); //he‟s so cute…,who‟s he??? String NiceGuyName = ng.getName(); System.out.println(“OH…!!!! HE‟S “ + NiceGuyName.toUpperCase()); } } - 12 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 13. Pemrograman Berorientasi Obyek Gambar 2. Aplikasi Java Diatas merupakan contoh pendefinisian sebuah class bernama NiceGuy pada Gambar 1.Pada Gambar 2 merupakan kode dari sebuah aplikasi java yang bernama OurFirstCode. Padaaplikasi tersebut kita menggunakan class NiceGuy untuk membuet objek bertipe NiceGuy.Pendefinisian Class Sintaks dalam mendefinisikan class adalah sebagai berikut : [modifier-modifier] class namaclass [extends parentclass] [implements interface] { [deklarasi field-field] [definisi method-method] } Yang tertera didalam kurung siku bersifat optional. Dengan demikian, definisi minimal darisebuah class bisa jadi seperti berikut : class Useless { //….mmm…. } Tidak ada yang bisa kita harapkan dari objek diatas. Contoh yang lebih baik adalahGambar 1. Disana kita mendeklarasikan 1 field dan 3 method. Pada baris 8 kita mendeklarasikanfield yang bernama name yang bertipe string. Secara umum sintaks untuk mendeklarasikan fieldadalah : type namafield; Tipe dari field bisa primitif (seperti int, boolean, float, dan sebagainya), dan bisa jugaObject (seperti String, Vector, Hashtable, dan sebagainya). Method-method yang dimiliki class NiceGuy adalah method sayHello() sepanjang baris 14-16 (method void), method sayHelloOutLoud() pada baris 17-19 (method void), dan methodgetName() pada baris 20-22 (method non-void). Secara umum sintaks dalam pendefinisian sebuahmethod adalah : [modifier-modifier] return-type namamethod ( [parameter1, [parameter2],… , [parameter N] ) { [statement-statement]; } Tipe Return bisa void, tipe data primitif, atau tipe data object. Method dengan tipe returnnon-void harus mencantumkan statement return <something> pada akhir deklarasi method itu(seperti pada baris 21 class NiceGuy) kita juga dapat menggunakan kata return pada method voiduntuk keluar dari method tersebut. Bagian penting lain dari definisi class adalah constructor. Pendefinisian constructordicontohkan pada baris 10-12 class NiceGuy. Constructor digunakan pada saat penciptaan objekdari sebuah class. Pendeklarasian constructor mirip dengan pendeklarasian method, dengan satupengecualian bahwa constructor tidak mencantumkan tipe return. [modifier-modifier] namaconstructor ([parameter 1], [parameter 2], … - 13 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 14. Pemrograman Berorientasi Obyek , [parameter N]) { [statement-statement]; } Hal lain yang perlu dicatat tentang constructor adalah, nama constructor harus samadengan classnya. Constructor tanpa parameter disebut default constructor. Kalau kita sama sekalitidak mendeklarasikan constructor, compiler secara otomatis akan membuatkan sebuah defaultconstructor. Pada Gambar 2, aplikasi OurFirstCode memanfaatkan class NiceGuy untuk menciptakansebuah objek bertipe NiceGuy dimemori (perhatikan baris 13 gambar 2). Setelah itu, reference ngdapat digunakan untuk memanggil method-method (mengirimkan pesan kepadanya) atau mengaksesfield-field dari objek yang bersangkutan. Reference adalah seperti alamat rumah sedangkan objek adalah rumahnya. denganmengetahui alamat, kita bisa mencapai rumah yang dimaksud.Inheritance Salah satu topik penting dalam OOP adalah inheritance (pewarisan sifat). Denganinheritance, pengembangan software dapat bekerja lebih efisien dan lebih cepat. Berkatinheritance dapat menggunakan definisi class yang pernah dibuat sebelumnya untuk membuat class-class lain yang menyerupai class tersebut. Perhatikan contoh berikut : public class KattWorld { public static void main (String args[]) { Katt k = new Katt(); k.speak(); Anggora a = new Anggora(); a.speak(); a.jump(); Siam s = new Siam(); s.speak(); } } class Katt { public Katt() { system.out.println(“Katt Constructor”); } public void speak() { system.out.println(“Miaww…”); } } class Anggora extends Katt { public void jump() { system.out.println(“Crash…Boom…”); } } class Siam extends Katt { public Siam() { system.out.println(“Siam Constructor”); } public void speak() { system.out.println(“Mmurrrr…mmurrrr…”); } } Gambar 3. Kisah kucing - 14 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 15. Pemrograman Berorientasi Obyek Hal pertama yang harus diperhatikan dari gambar 3 dalah cara melakukan inheritance.Coontoh diatas mempunyai satu class bernama Katt (baris 12-19). Kemudian dibut class lainnya yangmempunyai sifat seperti Katt, tetapi memiliki keunikan sendiri. Contohnya adalah class Anggora,kita dapat membuat subclass dari Katt (baris 21-25). Kini dapat dikatakan bahwa Katt menjadi parentclass (baseclass atau superclass) dari classAnggora. Secara umum kita dapat mendefinisikan suatu class sebagai turunan dari baseclass dengancara : class namaclass extends baseclass { [statement-statement]; }Method overiding Kita membuat varian baru lain dari Katt dengan cara mengeong Murr….Murr…Murr…. Kitanamai varian itu Siam. Kita definisikan Siam sebagai subclass dari Katt, tapi kini kita melakukanmetode overiding, kita mendefinisikan ulang method speak() didalam definisi class Siam. Jikadijalankan akan menghasilkan output : Katt constructor Miaww… Katt constructor Miaww… Crash…Boom… Katt constructor Siam constructor Mmurrr…mmurrr… Baris 6 dan 7 dimunculkan sewaktu berlangsung konstruksi/instantiasi objek bertipe Siam.Default constructor Katt dijalankan terlebih dahulu. Ini menunjukkan bahwa default, kecuali kitaminta yang lain, dari baseclass secara otomatis dijalankan terlebih dahulu sebelum constructor dariclass yang bersangkutan.This This sebenarnya adalah sebuah variable read-only (tidak dapat diubah nilainya). Denganvariable ini, kita mendapatkan reference/pointer menuju objek terkini. Bayangkan aplikasi andasedang berjalan, pada saat tertentu yang dijalankan oleh komputer anda adalah method aMethod()milik object anObject. Dari method aMethod() anda membutuhkan reference ke objek terkini yaituobject anObject itu sendiri. Untuk itulah kita menggunakan variabel this dalam method aMethod()milik object anObject. Perhatikan contoh berikut : public class BeavisAndButtheadStory { public static void main (string[] args) { DivineBeing beavis = new DivineBeing (“Beavis”); DivineBeing butthead = new DivineBeing (“Butthead”); //guess what‟s gonna happen next… beavis.messWith (butthead); butthead.makeRevenge(); } } class DivineBeing { private String name; private DivineBeing baddDivineBeing; - 15 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 16. Pemrograman Berorientasi Obyek public DivineBeing (String name) { this.name = name ; } public void messWith (DivineBeing anotherDivineBeing) { anotherDivineBeing.kapow(this); } public void kapow (DivineBeing baddDivineBeing) { system.out.println(baddDivineBeing.getName()+”!!!!Damn You!!”); //forgive but not forget… this.baddDivineBeing = baddDivineBeing; } public void makeRevenge() { of (baddDivineBeing != null) { baddDivineBeing.kapow(this); } } public String getName() { return name; } } Gambar 4.Contoh penggunaan kata kunci this beavis memulai gara-gara dengan memukul butthead, beavis memberikan buttheadreferensi atas dirinya sendiri. Hal ini dilakukan dengan memberikan argument this padapemanggilan method kapow(divineBeing baddDivineBeing). Dengan reference yang ia dapatkan itu ,suatu saat butthead dapak balik mengirim pesan makeRevenge() ke beavis.butthead ingat betulsiapa yang memukulnya, karena sewaktu ia dipukul, ia menyimpan reference ke objek beavis itu padavariabel baddDivineBeing miliknya, yang dideklarasikan pada baris 13. Praktek diatas disebutCallback. Penggunaan lain dari this dapat dilihat pada baris 15 dan 23. Pada baris 15, kita bermaksudmenetapkan variabel name yang di deklarasikan pada baris 12, tapi sekarang timbul konflik dalampenamaan variabel. Didalam daftar argumen pada constructor kita juga mendefinisikan variabel lainyang juga bernama name (baris 14). Jangkauan variabel name pada baris 12 mencakup semua ruangpada class DivineBeing, sedangkan variabel name pada baris 14 mempunyai jangkauan terbatasdidalam constructor itu. Untuk mengatakan saya menginginkan name yang global bukan name yanglokal, kita menerobos keluar dengan keyword this. Dapat dilihat pada gambar 5. class DivineBeing { private String name; private DivineBeing baddDivineBeing; public DivineBeing (String name ) { this.name = name ; } Gambar 5.Out Of The Box Experience - 16 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 17. Pemrograman Berorientasi ObyekAbstract Abstract method adalah method yang belum mempunyai implementasi. Kita dapatmenyatakan suatu method abstract dengan membubuhkan keyword abstract pada deklarasi methodtersebut. Secara umum sintaks dari pendeklarasian method abstract : abstract return-type namamethod ([daftar-parameter]);Contoh : public class ExplainAbstract { public static void main (String args[]) { Penyanyi joshua = new Pnyanyi(); joshua.berkesenian(); Pemrogram raka = new Pemrogram(); raka.berkesenian(); } } abstract class Seniman { public abstract void berkesenian(); public void tidur() { system.out.println (“ZZZZ…”); } } class Pemrogram extends Seniman { public void berkesenian() { system.out.println(“tap…tap…click- click…tap…PLAK ! Click…DOR !!!”); } public void tidur() { system.out.println(“Buzzz…ngingggg….”); } } class Penyanyi extends Seniman { public void berkesenian() { system.out.println(“Tralala-Trilili…”); } } Gambar 6. Contoh Pendeklarasian method abstractStatic method Pada contoh-contoh sebelumnya kita harus menginstantiasi/membuat objek terlebihdahulu sebelum dapat menggunakan method-method atau mengakses field-field pada class yangbersangkutan. Tapi dengan mendefinisikan suatu field atau method sebagai static, kita dapat sajamengakses field method tersebut tanpa harus melakukan instantiasi terlebih dahulu. Perhatikancontoh berikut : public class MyGeomUtil { int iAmNotPopular = 13; static int iAmCelebrity = 7; public static double luasSegiempat (float length, float width) { - 17 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 18. Pemrograman Berorientasi Obyek return length * width; } public static double luasSegitiga (float alas, float tinggi) { return 0.5 * alas * tinggi; } public static double luasSegitiga (float A, float B, float gamma) { //fungsi sin (double angel) menerima masukan sudut //dalam radian angle not angel, you prevert..! return 0.5 * A * B * Math.sin(gamma / Math.PI); } } Gambar 7. Definisi MyGeomUtilFinal Dengan menambahkan modifier final pada deklarasi sebuah method, kita menetapkanbahwa method pada class tersebut tiidak bisa ditimpa pada subclass yang kelak mungkin akandibuat. Salah satu alasan untuk membubuhkan final pada method di sebuah base class adalahkarena method itu begitu fundamental bagi kerja instance class tersebut, sehingga jika diimplementasikan secara berbeda oleh subclassnya ( yang bisa saja ditulis oleh programer yang salah) berpotensi menyebabkan kerja instance itu tidak benar. Bentuk umum final method : [modifier-modifier] final namamethod() { //…mmmm….. } Final juga bisa diberlakukan bagi class, kita tidak dapat membuat turunan dari class final.Bentuk umum final class : final class namaclass extends parentclass { //…mmm… }Interface Pada Interface juga kita dapat mendeklarasikan method-method, field-field (denganbeberapa catatan tentunya), dan juga dapat membuat rantai inheritance seperti yang dilakukanpada class. Lihat contoh program dibawah ini : import java.awt.*; import java.awt.event.*; public class AustinPower extends Frame implements MouseListener { Button behave; public static void main (String args[]) { AustinPower asyWhoShaggedMe = new AustinPower(); spyWhoShaggedMe.setSize(100,100); spyWhoShaggedMe.setVisible(true); } public AustinPower() { behave = new Button (“I Am a Button”); behave.addMouseListener(this); - 18 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 19. Pemrograman Berorientasi Obyek add(behave); } public void mouseEntered(MouseEvent me) { behave.setLabel (“Click me…!!!”); } public void mouseExited(MouseEvent me) { behave.setLabel (“Come to me…!!!”); } public void mousePressed(MouseEvent me){} public void mouseReleased(MouseEvent me){} public void mouseClicked(MouseEvent me){} } Gambar 8. Penggunaan InterfaceSedangkan interface MouseListener seperti tertera dibawah ini : package java.awt.event; import java.util.EventListener; /** * The listener interface for receiving mouse event on a * Component. * @version 1.7 07/01/98 * @author Carl Quinn */ public interface MouseListener extends EventListener { public void mouseClicked (MouseEvent e); public void mousePressed (MouseEvent e); public void mouseReleased (MouseEvent e); public void mouseEntered (MouseEvent e); public void mouseExited (MouseEvent e); } Gambar 9. Deklarasi interface MouseListener Pada contoh diatas, kita mengatakan bahwa AustinPower mengimplementasikanMouseListener. Secara umum interface dapat dideklarasikan sebagai berikut : interface namainterface [extends parentinterface] { [deklarasi field-field (konstanta)] [deklarasi method-method] Mendeklarasikan method dalam interface mirip dengan mendeklarasikan method abstract,dimana deklarasi method tidak diakhiri pasangan kurung kurawal, melainkan tanda titik koma : return-type namamethod ([daftar parameter]); Ada satu catatan, field-field yang didefinisikan pada interface secara otomatis bersifatstatic dan final, yang berarti mereka hanya bertindak sebagai konstanta. sedangkan secara umum, suatu class dibuat agar mengimplementasikan suatu interfacedengan cara sebagai berikut : - 19 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 20. Pemrograman Berorientasi Obyek class namaclass [extends parentclass] [implements interface1,interface2,…] { [deklarasi field-field] [deklarasi method-method milik class ini] [deklarasi implementasi method-method yang terdefinisikan pada interface-interface yang di implementasi oleh class tersebut] } Pada contoh diatas dengan mengimplementasikan MouseListener, class AustinPowerdikatakan menandatangai suatu kontrak yang menyatakan bahwa ia mampu menunjukkan kelakuan-kelakuan seorang MouseListener (yaitu bereaksi terhadap event-event yang berhubungan denganMouse). Semua method yang terdefinisi pada interface adalah betul-betul abstract, tidakada implementasinya. Salah satu konsekuensi dari totalitas abstraksi pada interface itu adalahsemua method yang tertera pada interface harus di implementasikan oleh implementor.Polymorphism Polymorphism didefinisikan sebagai kemampuan beberapa objek bertipe sama bereaksisecara berbeda terhadap message yang sama. Lihat contoh dibawah ini : public class KattParty { public static void main (String args[]) { Katt[] kandangKatt = new Katt[3]; kandangKatt[0] = new Anggora(); kandangKatt[1] = new Siam(); kandangKatt[2] = new Katt(); for (int I = 0 ; I < 3 ; I++) { kandangKatt[I].speak(); } } } Gambar 10. Pesta Kucing Disetiap iterasi pada loop diatas, pada dasarnya kita mengirimakan pesan yang sama keobjek-objek yang bertipe sama (yaitu Katt, sesuai dengan definisi array pada baris 3), speak().Walaupun begitu, ternyata masing-masing bereaksi dengan caranya sendiri-sendiri. Contoh lain dari polymorphism yaitu, misalkan kita membuat aplikasi client/server, dimanaclient mengirimkan objek-objek Katt (dan tentunya bisa juga apapun turunan Katt) ke server. Padakasus tersebut, server bersedia menerima Kat-Kat itu tanpa terlalu mempermasalahkan perbedaanspesifikasinya. Untu itu kode diserver bisa jadi seperti berikut: … Katt k = null; while (true) { k = receive(); } … Tentunya untuk kasus ini, tidaklah tepat jika, secara static kita mengasosiasikan k denganclass Siam (misal dengan pendeklarasian Siam k = null). Pada kode diatas, pengasosiasian k denganclas spesifik (Anggora, Siam atau lainnya) dilakukan pada saat run-time, yaitu ketika return Valuedari pemanggilan receive() di-assign ke k. Itulah yang disebut dynamic/late binding. - 20 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 21. Pemrograman Berorientasi ObyekOperator Instanceof Bagaimana seandainya pihak server ingin mengetahui type spesifik dari objek Katt yangditerimanya ? lihat contoh KattParty yang dimodifikasi berikut : public class KattParty { public static void main (String args[]) { Katt[] kandangKatt = new Katt[3]; kandangKatt[0] = new Anggora(); kandangKatt[1] = new Siam(); kandangKatt[2] = new Katt(); for (int I = 0 ; I < 3 ; I++) { kandangKatt[I].speak(); if (kandangKatt[I] instanceof Siam) { System.out.println(“Wow, It‟s a Siam…”); } else if (kandangKatt[I] instanceof Anggora) { System.out.println(“Look, they sent us Anggora…”); }else { System.out.println(“Well…It could be Lucifer,” + “ or Alleys or Regular Katt”); System.out.println(“But one thing for sure…it‟s Katt” + “ Praise the Lord”); } } } } Gambar 11. To know more about Katt Operator yang kita pakai adalah instanceof. A instanceof B, mengevaluai apakah objek Abertipe B (B adalah nama class). Evaluasi itu menghasilkan nilai true jika nama class dari objek Aadalah B atau nama parent/grandparent/greatgrandparent /seterusnya dari class dari objek Aadalah B. Evaluasi juga akan bernilai benar jika B adalah nama interface dan A mengimplementasikanB. Begitu pula jika parent/grandparent/greatgrandparent/seterusnya dari class objek Amengimplementasi B. Singkat kata. jika A instanceof B menghasilkan true, berarti objek A dapat menunjukkanbehavior yang disyaratkan oleh class atau interface B.Package Kita biasannya mengelompokkan class-class (dan juga interface-interface) yang terkait(karena jenisnya/fungsinya/alasan lain) dalam sebuah package. Mungkin ada baiknya jika class-class geometris yang kita buat dikumpulkan dalam sebuah package bernama com.raka.geoms /*simpan sebagai Graphic.java */ package com.raka.geoms; public abstract class Shape { ……. } Gambar 12. Package---1 /* Simpan sebagai Rectangle java */ package com.raka.geoms; public class Rectangle extends Shape { …………… } Gambar 13. Package---2 - 21 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 22. Pemrograman Berorientasi Obyek /* Simpan sebagai Triangle.java */ package com.raka.geoms; public class Triangle extends Shape { …………… } Gambar 14. Package---3 Beberapa keuntungan mengorganisasi class-class buatan kita dalam sebuah package adalah :1. Terhindar dari konflik penamaan. Mungkin saja ada orang lain, dibelahan dunia lain, membuat class yang bernama Rectangle juga. Yang membedakan antara Rectangle kita dengan yang lain adalah fully qualified name. Fully qualified name dari class Rectangle kita adalah com.raka.geoms.Rectangle.2. Teratur. Mendapatkan suatu class tertentu akan mudah dengan mengetahui nama package- nya. Pada contoh diatas, masing-masing anggota dari package com.raka.geoms disimpan di fileterpisah, dan dideklarasikan sebagai public. dengan demikian class/program lain (yang bukananggota com.raka.geoms) dapat mengimport clas-class kita diatas. Kita juga dapat mendefinisikanbeberapa class sekaligus dalam sebuah file java, seperti contoh berikut : /* Simpan sebagai NuclearWarHead.java */ package com.raka.lethal; public class NuclearWarHead { …………… } class Sarin { …………………. } class Uzi { …………………. } Gambar 15. All in Life Jika kita kompilasi NuclearWarHead.java diatas, kita akan mendapatkan tiga file class,yaitu NuclearWarHead.class,Sarin.class, Uzi.class. Kesemuanya akan menjadi anggota dari packagecom.raka.lethal. Akan tetapi hanya NuclearWarHead yang bisa digunakan secara langsung dari luarpackage com.raka.lethal, karena hanya NuclearWarHead yang dideklarasikan sebagai public,selebihnya dedeklarasikan sebagai protected (defaultnya), sehingga hanya dapat digunakan olehclass-class yang tergabung didalam com.raka.lethal. Sekarang untuk menggunakan class-class yang terdapat pada com.raka.geoms dari luarcom.raka.geoms, kita mengenal kata kunci import. Seperti contoh dibawah ini : package com.drawworks.threedee; import com.raka.geoms.*; …… public class Cube { …… Rectangle r = new Rectangle (); ….. } ….. - 22 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 23. Pemrograman Berorientasi Obyek Gambar 16. Mengimpor class. Jika pemrogram com.drawworks.threedee bermaksud menggunakan class-class yangterdapat pada java.awt juga dimana terdapat juga class Rectangle, maka saat inilah digunaka fullyqualified name. seperti contoh dibawah ini : package com.drawworks.threedee; import com.raka.geoms.*; import java.awt.*; …… public class ThreeWorld extends Canvas { …… com.raka.geoms.Rectangle r = new com.raka.geoms.Rectangle (); ….. } ….. Gambar 17. Fully Qualified Name Package-package didalam harddisk dapat kita organisasikan dalam suatu strukturdirektori. File-file class anggota com.raka.geoms terkumpul dalam struktur direktori. Anda bolehmengambil kesimpulan bahwa tiap-tiap suku kata pada nama package adalah nama sebuah direktori. - 23 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 24. Pemrograman Berorientasi Obyek PENANGANAN EKSEPSI Eksepsi adalah keadaan tidak normal yang muncul pada suatu bagian program pada saatdijalankan. Penanganan eksepsi pada java membawa pengelolaan kesalahan program saat dijalankankedalam orientasi-objek. Eksepsi java adalah objek yang menjelaskan suatu keadaan eksepsi yangmuncul pada suatu bagian program. Saat suatu keadaan eksepsi muncul, suatu objek exception dibuat dan dimasukkan ke dalammethod yang menyebabkan eksepsi. Method tersebut dapat dipilih untuk menangani eksepsiberdasarkan tipe tertentu. Method ini juga menjaga agar tidak keluar terlalu dini melalui suatueksepsi, dan memiliki suatu blok program yang dijalankan tepat sebelum suatu eksepsi menyebabkanmetodenya kembali ke pemanggil. Eksepsi dapat muncul tidak beraturan dalam suatu method, atau dapat juga dibuat secaramanual dan nantinya melaporkan sejumlah keadaan kesalahan ke method yang memanggil.Dasar-dasar penanganan Eksepsi Penanganan eksepsi pada java diatur dengan lima kata kunci : try, catch, throw, throws danfinally. Pada dasarnya try digunakan untuk mengeksekusi suatu bagian program, dan jikamuncul kesalahan, sistem akan melakukan throw suatu eksepsi yang dapat anda catchberdasarkan tipe eksepsinya, atau yang anda berikan finally dengan penangan default. Berikut ini bentuk dasar bagian penanganan eksepsi : try { // Block of Code } catch (ExceptionType1 e) { // Exception Handler for ExceptionType1 } catch (ExceptionType2 e) { // Exception Handler for ExceptionTYpe2 throw (e); // re-throw the Exception… } finally { }Tipe Eksepsi Dipuncak hirarki class eksepsi terdapat satu class yang disebut throwable. Class inidigunakan untuk merepresentasikan semua keadaan ekasepsi. Setiap ExceptionType pada bentukumum diatas adalah subclass dari throwable. Dua subclass langsung throwable didefinisikan untuk membagi class throwable menjadi duacabang yang berbeda. Satu, class Exception, digunakan untuk keadaan eksepsi yang harus ditangkapoleh program yang kita buat. Sedangkan yang lain diharapkan dapat menangkap class yang kitasubclasskan untuk menghasilkan keadaan eksepsi. Cabang kedua throwable adalah class error, yang mendefinisikan keadaan yang tidakdiharapkan untuk ditangkap dalam lingkungan normal.Eksepsi Yang Tidak Dapat Ditangkap Obyek eksepsi secara otomatis dihasilkan oleh runtime java untuk menanggapi suatukeadaan eksepsi. Perhatikan contoh berikut : class Exc0 { public static void main (Stinr args[]) { - 24 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 25. Pemrograman Berorientasi Obyek int d = 0; int a = 42 / d; } } Saat runtime java mencoba meng-eksekusi pembagian, akan terlihat bahwa pembaginyaadalah nol, dan akan membentuk objek eksepsi baru yang menyebabkan program terhenti dan harusberurusan dengan keadaan kesalahan tersebut. Kita belum mengkodekan suatu penangan eksepsi,sehingga penanganan eksepsi default akan segera dijalankan. Keluaran dari program diatas : java.lang.ArithmeticExpression : /by zero at Exc0.main (Exc0.java:4)Berikut adalah contoh lainnya dari eksepsi : class Exc1 { static void subroutine() { int d = 0; int a = 42 / d; } public static void main (Stinr args[]) { Exc1.subroutine(); } }Output-nya :java.lang.ArithmeticException : / by zero at Exc1.subroutine(Exc1.java :4) at Exc1.main(Exc1.java : 7)Try dan Catch Kata kunci try digunakan untuk menentukan suatu blok program yang harus dijaga terhadapsemua eksepsi, setelah blok try masukkan bagian catch, yang menentukan tipe eksepsi yang akanditangkap. Perhatikan contoh berikut : class Exc2 { public static void main (String args[]) { try { int d = 0; int a = 42 / d; } catch (ArithmeticException e) { System.out.println(“Division By Zero); } } }Throw Pernyataan throw digunakan untuk secara eksplisit melemparkan suatu eksepsi. Pertamakita harus mendapatkan penanganan dalam suatu instance throwable, melalui suatu parameterkedalam bagian catch, atau dengan membuatnya menggunakan operator new. Bentuk umumpernyataan throw : - 25 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 26. Pemrograman Berorientasi Obyek throw ThrowableInstance; Aliran eksekusi akan segera terhenti setelah pernyataan throw, dan pernyataanselanjutnya tidak akan dicapai. Blok try terdekat akan diperiksa untuk melihat jika telah memilikibagian catch yang cocok dengan tipe instance Throwable. Jika tidak ditemukan yang cocok, makapengaturan dipindahkan ke pernyataan tersebut. Jika tidak, maka blok pernyataan try selanjutnyadiperiksa, begitu seterusnya sampai penanganan eksepsi terluar menghentikan program danmencetak penelusuran semua tumpukan sampai pernyataan throw. Contoh : class throwDemo { static void demoProc() { try { throw new NullPointerException(“demo”); } catch (NullPointerException e) { System.out.println(“caught inside demoproc…”); throw e; } } public static void main (String args[]) { try { demoproc(); } catch (NullPointerException e) { System.out.println(“recaugt : “ + e); } } }Output : caught inside demoproc recaught : java.lang.NullPointerException : demoThrows Kata kunci throws digunakan untuk mengenali daftar eksepsi yang mungkin di-throw olehsuatu method. Jika tipe eksepsinya adalah error, atau RuntimeException, atau suatu subclassnya,aturan ini tidak berlaku, karena tidak diharapkan sebagai bagian normal dari kerja program. Jika suatu method secara eksplisit men-throws suatu intans dari Exception atausubclassnya, diluar RuntimeException, kita harus mendeklarasikan tipenya dengan pernyataanthrows. ini mendefinisikan ulang deklarasi method sebelumnya dengan sintaks sbb : type method-name (arg-list) throws exception-list { }Contoh : class ThrowsDemo { static void procedure () thorws IllegalAccessException { System.out.println(“Inside Procedure”); throw new IllegalAccessException(“demo”); } public static void main(String args[]) { try { - 26 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 27. Pemrograman Berorientasi Obyek procedure(); } catch (IllegalAccessException e) { System.out.println(“caught “+ e); } } }Output : Inside procedure caught java.lang.IllegalAccessException : demoFinally Saat suatu eksepsi dilemparkan, alur program dalam suatu method membuat jalur yangcenderung tidak linier melalui method tersebut, melompati baris-baris tertentu, bahkan mungkinakan keluar sebelum waktunya pada kasus dimana tidak ada bagian catch yang cocok. Kadang-kadang perlu dipastikan bahwa bagian program yang diberikan akan berjalan, tidak perduli eksepsiapa yang terjadi dan ditangkap. Kata kunci finally dapat digunakan untuk menentukan bagianprogram seperti itu. Setiap try membutuhkan sekurang-kurangnya satu bagian catch atau finally yang cocok.Jika kita tidak mendapatkan bagian catch yang cocok, maka bagian finally akan dieksekusi sebelumakhir program, atau setiap kali suatu method akan kembali ke pemanggilnya, melalui eksepsi yangtidak dapat ditangkap, atau melalui pernyataan return, bagian finally akan dieksekusi sebelumkembali ke method kembali. Berikut adalah contoh program yang menunjukkan beberapa method yang keluar denganberbagai cara, tidak satu pun tanpa mengeksekusi bagian finally-nyA. class finallyDemo { static void proA() { try { System.out.println(“Inside procA..”); throw new RuntimeException(“Demo”); } finally { System.out.println(“procA is finally”); } } static void proB() { try { System.out.println(“Inside procB..”); return; } finally { System.out.println(“procB is finally”); } } public static void main(String args[]) { try { procA{}; } catch (Exception e); procB(); - 27 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 28. Pemrograman Berorientasi Obyek } }Output : Inside procA.. procA is finally Inside procB.. procB is finally Multithreading Banyak persoalan dalam pemrograman membutuhkan kemampuan suatu program untukmelakukan beberapa hal sekaligus, atau memberikan penanganan segera terhadap suatu kejadian/event tertentu dengan menunda aktivitas yang sedang dijalankan untuk menangani event tersebutdan akhirnya kembali melanjutkan aktivitas yang tertunda. Contoh, dalam sistem aplikasi jaringan, kita dapat membuat suatu program melakukankomputasi lokal dengan data yang sudah didapat dari jaringan, pada saat program tersebutmenunggu datangnya tambahan data dari jaringan. Tanpa multithreading, program tersebut harusmelakukannya secara sekuensial dalam sebuah alur program tunggal (yaitu alur control utama), yangdiawali dengan penantian tibanya keseluruhan data, baru kemudian komputasi. Pada masa penantiantersebut, komputer berada pada keadaan idle yang menyebabkan ketidakefisienan padakeseluruhan program. Dengan multithreading kita dapat menciptakan dua thread secara dinamis, yaitu threadyang berjaga dipintu gerbang, menunggu masuknya data., dan thread yang melakukan komputasilokal atas data yang sudah tersedia.Multithreading dan Java Thread (seringkali disebut juga lightweight process atau execution context) adalahsebuah singlesequentialflow of control didalam sebuah program. Secara sederhana, thread adalahsebuah subprogram yang berjalan didalam sebuah program. Seperti halnya sebuah program, sebuah thread mempunyai awal dan akhir. Sebuah programdapat mempunyai beberapa thread didalamnya. Jadi perbedaannya program yang multithreadedmempunyai beberapa flow of control yang berjalan secara konkuren atau paralel sedangkan programyang singlethreaded hanya mempunyai satu flow of control. Sebuah Thread Sebuah Program Thread lainnya Gb.1. Dua thread dalam satu program - 28 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 29. Pemrograman Berorientasi Obyek Dua program yang dijalankan secara terpisah ( dari command line secara terpisah ), beradapada dua address space yang terpisah. Sebaliknya, kedua thread pada gambar diatas berada padaaddress space yang sama (address space dari program dimana kedua thread tersebut dijalankan). Kalau program itu berjalan diatas mesin dengan single processor, maka thread-thread itudijalankan secara konkuren(dengan mengeksekusi secara bergantian dari satu thread ke threadyang lainnya). Jika program itu berjalan diatas mesin dengan multiple processor, maka thread-thread itu bisa dijalankan secara paralel (masing-masing thread berjalan di processor yangterpisah). Concurrency Parallelism Time Time Task I Task 2 T a s T k a s 1 k 2 Gb.2. Konkurensi dan parallelism Gambar 2 dapat menjelaskan perbedaan antara konkurensi dan parallelism. Bahasa Javamempunyai kemampuan multithreading built-in, pada Java Virtual Macjine terdapat threadscheduler yang menentukan thread mana yang beraksi pada selang waktu tertentu. Scheduler padaJVM mendukung preemptive multithreading, yaitu suatu thread dengan prioritas tinggi dapatmenyeruak masuk dan menginterupsi thread yang sedang beraksi, kemampuan ini sangatmenguntungkan dalam membuat aplikasi real-time. Scheduler pada JVM juga mendukung non-preemptive multithreading I(atau sering disebutjuga cooperative multithreading), yaitu thread yang sedang beraksi tidak dapat diinterupsi, ia akanmenguasai waktu CPU, sampai ia menyelesaikan tugasnya atau secara eksplisit merelakan diri untukberhenti dan memberi kesempatan bagi thread yang lain. - 29 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 30. Pemrograman Berorientasi ObyekDaur Hidup sebuah Thread Blocked stop() suspend() sleep() Dead New wait() Born stop() resume() notify() start() stop() Runnable Running yield() Gb.3. State-state dari threadNewborn Sevbuah thread berada pada state ini ketika dia di instantiasi. Sebuah ruangan dimemoritelah dialokasikan untuk thread itu,dan telah menyelesaikan tahap inisialisasinya. ……… Thread timerThread = new TimerThread(); ……..Pada state ini, timeThread belum masuk dalam skema penjadwalan thread scheduler.Runnable Pada state ini, sebuah thread berada dalam skema penjadwalan, akan tetapi dia tidaksedang beraksi. Kita bisa membuat timerThread yang kita buat sebelumnya masuk ke staterunnable dengan : ….. timerThread.start(); ……Kapan tepatnya timerThread beraksi, ditentukan oleh thread scheduler.Running Pada state ini, thread sedang beraksi. Jatah waktu beraksi bagi thread ini ditentukan olehthread scheduler. Pada kasus tertentu, thread scheduler berhak meng-interupsikegiatan darithread yang seddang beraksi (misalnya ada thread lainnya dengan prioritas yang lebih tinggi). Thread dalam keadaan running bisa juga lengser secara sukarela, dan masuk kembali kestate runnable, sehingga thread lain yang sedang menunggu giliran(runnable) memperolehkesempatan untuk beraksi. Tinddakan thread yang lengser secara sukarela itu biasanya disebutyield-ing. public void run() { - 30 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com
  • 31. Pemrograman Berorientasi Obyek ……. Thread.yield(); ……. } Blocked Pada tahap inii thread sedang tidak beraksi dan diabaikan dalam penjadwalan threadscheduler. Thread yang sedang terblok menunggu sampai syarat-syarat tertentu terpenuhi,sebelum ia kembali masuk kedalam skema penjadwalan thread scheduler (masuk state runnablelagi). Suatu thread menjadi terblok karena hal-hal berikut :a. Thread itu tidur untuk jangka waktu tertentu, seperti berikut : public void run() { …… try { thread.slepp(3000); //thread yg sedang beraksi akan tidur selama 3000 milisecond=3menit } catch (InterruptedException e) { ……. }b. Thread itu di- suspend(). Thread yang ter-suspend() itu bisa masuk kembali ke state runnable bila ia resume(). seperti hal berikut : …… //timerThread akan segera memasuki state blocked timerThread.suspend(); ……… timerThread.resume(); //timerThread kembali masuk state runnable ……c. Bila thread tersebut memanggil method wait() dari suatu object yang sedang ia kunci. Thread tersebut bisa kembali memasuki state runnable bila ada thread lain yang memanggil method notify() atau notifyAll() dari object tersebut.d. Bila thread ini menunggu selesainya aktifitas yang berhubungan dengan I/O. Misalnya, jika suatu thread menunggu datangnya bytes dari jaringan komputer maka secara otomatis thread tersebut masuk ke state blocked.e. Bila suatu thread mencoba mengakses critical section dari suatu object yang sedang dikunci oleh thread lain. Critical section adalah method/blok kode yang ditandai dengan kata synchronized.Dead Suatu thread secara otomatis disebut mati bila method run() – nya sudah dituntaskan(return dari method run() ). Contoh dibawah ini adalah thread yang akan mengecap state runninghanya sekali saat thread scheduler memberinya kesempatan untuk running, ia akan mencetak “ I‟mdoing something….something stupid….but I‟m proud of It”… kemudian mati. public class MyThread extends Thread { ….. public void run() { System.out.print(“I‟m doing something…”); System.out.print(“something stupid…”); System.out.println(“but I‟m proud of It…”); // MyThread akan mati begitu baris diatas selesai dieksekusi } …… } - 31 –SMK BIMA BOJONEGOROOmen Nayto : fb page : https://www.facebook.com/OMEN.NAYTO.page letter.omen@gmail.com