Download Intro1-Bab10-Membuat class sendiri

Document related concepts
no text concepts found
Transcript
MEMBUAT CLASS SENDIRI
TUJUAN
Pada akhir pembahasan, peserta diharapkan mampu untuk :
 Membuat class
 Mendeklarasikan atribut dan method untuk class
 Menggunakan reference this untuk mengakses data instance
 Membuat dan memanggil method overload
 Meng-import dan membuat package
 Menggunakan access modifier untuk mengatur akses ke
anggota class
MENDEFINISIKAN CLASS
Beberapa hal yang perlu diperhatikan pada saat pendefinisian
sintaks :
*
Digunakan untuk lebih dari 0berarti bahwa
boleh ada 0 atau lebih
kejadian dari baris
tersebut
yang
menggunakannya juga
<description>
menandakan bahwa Anda harus
mensubtitusikan nilai sebenarnya pada
bagian ini daripada
mengurangi
penulisannya
[]
pilihan
menandakan bahwa bagian ini hanya
MENDEFINISIKAN CLASS
Untuk mendefinisikan sebuah class, kita tuliskan :
<modifier> class <name> {
<attributeDeclaration>*
<constructorDeclaration>*
<methodDeclaration>*
}
<modifier> adalah sebuah modifier bertipe access
yang dapat dikombinasikan dengan modifier bertipe
lainnya.
CONTOH
public class StudentRecord {
//kita akan tambahkan kode di sini
nantinya
}
public
– digunakan supaya class dapat
diakses oleh class-class lain di luar
package
class
– merupakan keyword yang digunakan
untuk membuat class dalam Java
StudentRecord
– merupakan identifier untuk
mendeskripsikan class
PETUNJUK PENULISAN PROGRAM

Gunakan nama yang sesuai untuk penamaan class. Disarankan untuk
tidak menggunakan XYZ sebagai nama class atau nama asal-asalan
lainnya.

Nama class harus diawali dengan huruf KAPITAL.

Penamaan file harus tepat sama dengan nama yang digunakan oleh
class ber-modifier public.
MENDEKLARASIKAN ATRIBUT
Pendeklarasian atribut dapat ditulis dengan
menggunakan sintaks berikut ini,
<modifier> <type> <name> [= <default_value>];
INSTANCE VARIABLE
public class StudentRecord {
private String name;
private String address;
private int
age;
private double
mathGrade;
private double
englishGrade;
private double
scienceGrade;
private double
average;
//kita akan tambahkan kode di sini
}
private digunakan supaya variabel hanya dapat diakses dalam class.
Object lain tidak dapat mengakses variabel ini secara langsung.
PETUNJUK PENULISAN PROGRAM

Semua instance variable dideklarasikan pada deklarasi class.

Deklarasikan satu variabel untuk setiap baris.

Instance variable, seperti variabel lainnya, penamaannya harus
dimulai dengan huruf kecil.

Gunakan tipe data yang sesuai untuk setiap variabel yang
dideklarasikan.

Deklarasikan instance variable sebagai private sehingga hanya
class method yang dapat mengaksesnya secara langsung.
CLASS(STATIC) VARIABLE
public class StudentRecord {
//variabel instance yang telah kita
deklarasikan
private static int studentCount;
//kita tambahkan kode di sini
}
keyword static digunakan untuk menandai suatu static variable
MENDEKLARASIKAN METHOD
Pendeklarasian method dapat ditulis dengan menggunakan sintaks seperti di
bawah ini,
<modifier> <returnType> <name>(<parameter>*) {
<statement>*
}
<modifier>
modifier yang digunakan dapat berbedabeda
<returnType> dapat berupa tipe data (termasuk void)
<name>
dapat berupa identifier yang valid
<parameter> ::=
<parameter_type> <parameter_name>[,]
METHOD ACCESSOR
Method Accessor


digunakan untuk membaca value dari class (instance/static)
variable
ditulis dengan menggunakan sintaks berikut:
get<NameOfInstanceVariable>

dapat me-return value.
CONTOH 1
public class StudentRecord {
private String name;
:
public String getName(){
return name;
}
}
public – method dapat dipanggil oleh object-object di luar
class
String
– return type dari method.
method harus me-return value dengan tipe String
getName
– nama method
()
– method tidak memiliki parameter
CONTOH 2
public class StudentRecord {
private String name;
:
public double getAverage(){
double result = 0;
result=(mathGrade+englishGrade+scienceGrade)/3;
return result;
}
}
METHOD MUTATOR
Method Mutator

digunakan untuk menulis atau mengubah value dari
class(instance/static) variable

Ditulis dengan menggunakan sintaks berikut:
set<NameOfInstanceVariable>
CONTOH
public class StudentRecord {
private String name;
:
public void setName( String temp ){
name = temp;
}
}
public
– method dapat dipanggil oleh object-object di
luar class
void
– method tidak me-return value
setName
- nama method
(String temp)
– parameter yang digunakan di dalam method
MULTIPLE RETURN STATEMENT
 multiple
return statement dapat digunakan dalam
sebuah method selama tidak berada pada block
yang sama.
 konstanta
dapat digunakan untuk me-return value
sebuah variabel
CONTOH
public String getNumberInWords( int
num ){
String defaultNum = "zero";
if( num == 1 ){
return "one"; //return a constant
}
else if( num == 2){
return "two"; //return a constant
}
//return a variable
return defaultNum;
}
METHOD STATIC
public class StudentRecord {
private static int studentCount;
public static int getStudentCount(){
return studentCount;
}
}
public
– dapat dipanggil oleh object-object di luar class
static
– method dapat dipanggil melalui sintaks :
[ClassName].[methodName]
Sebagai contoh, pada program, kita dapat memanggil
method dengan sintaks :
StudentRecord.getStudentCount()
int
– return type dari method. Method harus me-return
value dengan tipe int
getStudentCount
– nama method
()
- method tidak mempunyai parameter
PETUNJUK PENULISAN PROGRAM

Nama method harus diawali dengan huruf kecil.

Nama method harus berupa kata kerja.

Disarankan untuk selalu menyediakan dokumentasi sebelum deklarasi
method.
Anda dapat menggunakan style pada javadoc.
SOURCE CODE UNTUK CLASS STUDENTRECORD
public class StudentRecord {
private
private
private
private
private
private
private
private
String name;
String address;
int age;
double mathGrade;
double englishGrade;
double scienceGrade;
double average;
static int studentCount;
SOURCE CODE UNTUK CLASS STUDENTRECORD
/**
* Me-return nama student
*/
public String getName(){
return name;
}
/**
* mengubah nama student
*/
public void setName( String temp ){
name = temp;
}
SOURCE CODE UNTUK CLASS STUDENTRECORD
/**
* Menghitung nilai rata-rata dari bahasa inggris,
* matematika, dan sains
*/
public double getAverage(){
double result = 0;
result = ( mathGrade+englishGrade+scienceGrade
)/3;
return result;
}
/**
* Me-return jumlah instance dari StudentRecords
*/
public static int getStudentCount(){
return studentCount;
}
CONTOH SOURCE CODE
PENGGUNAAN STUDENTRECORD
Public class StudentRecordExample{
public static void main(String args[]){
//Membuat tiga object untuk record Student
StudentRecord annaRecord = new StudentRecord();
StudentRecord beahRecord = new StudentRecord();
StudentRecord crisRecord = new StudentRecord();
//Mengubah nama Student
annaRecord.setName(“Anna”);
beahRecord.setName(“Beah”);
crisRecord.setName(“Cris”);
//Mencetak nama Anna
System.out.println(annaRecord.getName());
//Mencetak jumlah siswa
Sistem.out.println(“Count=”
+StudentRecord.getStudentCount());
}
}
OUTPUT PROGRAM
Anna
Student Count = 0
REFERENCE ‘THIS’
this
digunakan untuk mengakses instance variable yang dibayangi
oleh parameter
Reference ‘this’, dapat ditulis dengan menggunakan sintaks
berikut ini,
this.<namaInstanceVariable>
catatan : Reference ‘this’ hanya dapat digunakan untuk
instance variable ,bukan untuk static atau
class variable
CONTOH
public void setAge( int age ){
this.age = age;
}
METHOD OVERLOADING
Method overloading
−
penggunaan method dengan nama yang sama, parameter berbeda,
dan me-return value dengan return type yang berbeda
−
Dapat digunakan ketika operator yang sama memiliki implementasi
yang berbeda
Method overloading memiliki properti-properti berikut:
−
−
−
Nama yang sama
Parameter berbeda
Return type dapat berbeda atau sama
CONTOH
public void print (String temp){
System.out.println(“Name:”+name);
System.out.println(“Address:”+address);
System.out.println(“Age”+age);
}
public void print(double eGrade, double mGrade, double sGrade){
System.out.println(“Name”+name);
System.out.println(“Math Grade”+mGrade);
System.out.println(“English Grade”+eGrade);
System.out.println(“Science Grade”+sGrade);
}
CONTOH
Public static void main(String args[]){
StudentRecord annaRecord = new StudentRecord();
annaRecord.setName(“Anna”);
annaRecord.setAddress(“Phillipines”);
annaRecord.setAge(15);
annaRecord.setMathGrade(80);
annaRecord.setEnglishGrade(95.5);
annaRecord.setScienceGrade(100);
//overloaded method
annaRecord.print(annaRecord.getName());
annaRecord.print(annaRecord.getEnglishGrade(),
annaRecord.getMathGrade(),
annaRecord.getScienceGrade());
}
OUTPUT PROGRAM
Output program yang tampil saat pemanggilan pertama,
Name:Anna
Address:Philippines
Age:15
Output program yang tampil saat pemanggilan pertama,
Name:Anna
Math Grade:80.0
English Grade:95.5
Science Grade:100.0
CONSTRUCTOR
Constructor sangat penting dalam meng-instatiate sebuah object.
Constructor merupakan sebuah method yang digunakan untuk menempatkan
semua penginisialisasian.
Constructor memiliki properti-properti, sbb:
− Sebuah constructor seperti method yang lain, bagaimanapun hanya informasi
berikut yang dapat ditempatkan dalam kepala constructor, lingkup atau
kemampuan identifier mengakses (seperti public...), nama constructor dan
parameter.
−
Constructor tidak memiliki return value.
−
Constructor tidak dapat dipanggil langsung. Constructor hanya dapat dipanggil
dengan menggunakan operator new pada saat class instantiation.
CONSTRUCTOR
Constructor dapat dideklarasikan dengan
menggunakan sintaks berikut ini,
<modifier> <className> (<parameter>*) {
<statement>*
}
DEFAULT CONSTRUCTOR
Default Constructor
− merupakan constructor tanpa parameter.
−
default constructor secara implisit ada, jika class tidak
mendeklarasikan constructor apapun.
CONTOH
public StudentRecord()
{
//source code disini
}
CONSTRUCTOR OVERLOADING
public StudentRecord(){
//beberapa kode inisialisasi di sini
}
public StudentRecord(String temp){
this.name = temp;
}
public StudentRecord(String name, String address){
this.name = name;
this.address = address;
}
public StudentRecord(double mGrade, double eGrade,
double sGrade){
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
}
MENGGUNAKAN CONTRUCTOR
Berikut ini merupakan source code contoh penggunaan constructor,
public static void main( String[] args ){
//membuat tiga object untuk record Student
StudentRecord annaRecord = new StudentRecord("Anna");
StudentRecord beahRecord = new StudentRecord("Beah",
"Philippines");
StudentRecord crisRecord = new StudentRecord(80,90,100);
//beberapa kode di sini
}
PEMANGGIL CONSTRUCTOR ‘THIS()’
Sebuah constructor dapat dipanggil oleh constructor yang lain.
Dalam hal ini, dapat digunakan pemanggil this()
Hal yang perlu diperhatikan ketika menggunakan this() :
−
Pemanggil constructor this(), harus ada pada statement pertama
dalam constructor.
−
this() hanya digunakan dalam definisi constructor.
−
this() dapat diikuti oleh statement yang relevan.
CONTOH
Public StudentRecord(){
this(“some string”);
}
public StudentRecord(String temp){
this.name = temp;
}
Public static void main(String args[]){
StudentRecord annaRecord = new StudentRecord()
}
PACKAGE
Package
Merupakan pengelompokan class dan interface, yang
memiliki relasi dalam satu unit.
Package menyediakan mekanisme pengaturan kelompok
class dan interface untuk menghindari konflik
penamaan.
MENG-IMPORT PACKAGE
Untuk dapat menggunakan class-class di luar package yang
sedang Anda kerjakan, Anda perlu meng-import package dari
class-class tersebut.
Program Java secara otomatis akan meng-import package
java.lang.*, sehingga class String dan Integer dapat langsung
digunakan dalam program.
suatu package dapat di-import dengan menggunakan sintaks:
import <nameOfPackage>;
CONTOH
import java.awt.Color;
import java.awt.*;
MEMBUAT PACKAGE
Package dapat dideklarasikan dengan menggunakan sintaks:
package <namaPackage>;
Package juga dapat dibuat nested(bersarang). Dengan pengertian,
interpreter Java mengharapkan struktur direktori yang berisi class-class
yang dapat dieksekusi ke hierarki package yang cocok.
CONTOH
package SchoolClasses;
public class StudentRecord {
private String name;
private String address;
private int age;
:
MENGATUR CLASSPATH

Package SchoolClasses harus ditempatkan di dalam
direktori C:\

Pengaturan classpath harus merujuk pada direktori yang
bersangkutan, sehingga ketika dijalankan, JVM dapat
melihat dimana class-class tersebut disimpan.

mari kita lihat contoh pada slide berikut, apa yang akan
terjadi jika kita tidak melakukan pengaturan classpath.
MENGATUR CLASSPATH
Berikut ini merupakan hasil yang didapatkan, ketika class
StudentRecord di-compile dan dijalankan,
C:\schoolClasses>javac StudentRecord.java
C:\schoolClasses>java StudentRecord
Exception in thread "main" java.lang.NoClassDefFoundError: StudentRecord (wrong name:
schoolClasses/StudentRecord)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
MENGATUR CLASSPATH
Pengaturan classpath dalam Windows, dapat dideklarasikan
dengan menuliskan sintaks di bawah ini pada command prompt,
C:\schoolClasses> set classpath=C:\
C:\ adalah direktori dimana package ditempatkan.
Setelah mengatur classpath, program dapat dijalankan
dimanapun, dengan mengetik,
C:\schoolClasses> java
schoolClasses.StudentRecord
MENGATUR CLASSPATH
Pada sistem berbasis Unix, class harus berada
dalam direktori /usr/local/myClasses, dengan
deklarasi sintaks,
export classpath=/usr/local/myClasses
MENGATUR CLASSPATH
Pengaturan classpath dapat dilakukan dimana saja.
Classpath yang diatur boleh lebih dari satu, caranya :
 Pada Windows
pisahkan classpath dengan menggunakan ‘;’
set classpath=C:\myClasses;D:\;E:\MyPrograms\Java

Pada Unix
pisahkan classpath dengan menggunakan ‘:’
export classpath=/usr/local/java:/usr/myClasses
ACCESS MODIFIER
Ada 4 tipe access modifier dalam Java:
−
−
−
−
public
private
protected
Default
Default merupakan default access modifier, yang tidak
menggunakan keyword
public, private, dan protected merupakan access modifier tipe
akses, yang secara eksplisit harus ditulis.
HAK AKSES DEFAULT
Akses Default
−
−
Hanya class-class dalam package yang sama yang
memiliki akses ke class variable dan method
Tidak ada keyword bagi modifier default
CONTOH
public class StudentRecord {
//akses default ke instance variable
int name;
//akses default ke method
String getName(){
return name;
}
}
HAK AKSES PUBLIC
Akses public
Anggota class dapat diakses dari dalam maupun dari luar
class.
Object apapun yang berinteraksi dengan class, memiliki akses
ke anggota class yang ber-modifier public
Keyword : public
CONTOH
public class StudentRecord {
//akses default ke instance variable
public int name;
//akses default ke method
public String getName(){
return name;
}
}
HAK AKSES PROTECTED
Akses protected
Anggota class hanya dapat diakses oleh method dalam
class dan subclass dari class
Keyword : protected
CONTOH
public class StudentRecord {
//akses default ke instance variable
protected int name;
//akses default ke method
protected String getName(){
return name;
}
}
HAK AKSES PRIVATE
Akses private
Anggota class hanya dapat diakses oleh class yang
mereka definisikan di dalamnya
Keyword : private
CONTOH
public class StudentRecord {
//akses default ke instance variable
private int
name;
//akses default ke method
private String getName(){
return name;
}
}
PETUNJUK PENULISAN PROGRAM
Instance variable dari class harus dideklarasikan
menjadi private,
dan class hanya menyediakan method accessor
dan mutator untuk variabel tersebut.
KESIMPULAN









Mendefinisikan class-class
Mendeklarasikan Fields (instance, static/class)
Mendeklarasikan Method (accessor, mutator, static)
Me-return value dan multiple return statement
Reference ‘this’
Method overloading
Constructor (default, overloading, pemanggil this())
Package
Access Modifier (default, public, private, protected)