[Java OOP]Class และ Object คืออะไร
วันนี้มารู้จัก Class และ Object กัน ซึ่งในหัวข้อนี้มันจะเกี่ยวข้องกับเรื่อง Object-oriented programming โดยเรามาฝึกมองสิ่งที่ต่างๆเป็นวัตถุ ก่อนจะเข้าเรื่องผมขอบอกเลยว่าถ้าเข้าใจเรื่องนี้จะสามารถนำความรู้ไปประยุกต์ใช้ได้อย่างมากมายและอาจจะช่วยให้เขียนโปรแกรมได้ง่ายขึ้นอีกด้วยในบ้างกรณี
class คือ คุณลักษณะ หรือคุณสมบัติของวัตถุใดวัตถุหนึ่ง หรื่อจะง่ายๆคือเป็นตัวกำหนดคุณสมบัติได้ถูกสร้างขึ้น จะขอยกตัวอย่าง class Dog สุนัขก็จะมีคุณสมบัติ เช่น ชื่อ พันธฺุ์ และอื่นขึ้นอยู่กับคุณสมบัติของสิ่งที่เราสร้าง
หลักการเขียน class จะมีองค์ประกอบอยู่ 3 ส่วนด้วยกัน
สรุป Class และ Object
class คือ คุณลักษณะ หรือคุณสมบัติของวัตถุใดวัตถุหนึ่ง หรื่อจะง่ายๆคือเป็นตัวกำหนดคุณสมบัติได้ถูกสร้างขึ้น จะขอยกตัวอย่าง class Dog สุนัขก็จะมีคุณสมบัติ เช่น ชื่อ พันธฺุ์ และอื่นขึ้นอยู่กับคุณสมบัติของสิ่งที่เราสร้าง
หลักการเขียน class จะมีองค์ประกอบอยู่ 3 ส่วนด้วยกัน
- คุณสมบัติ(Field) คือ ตัวแปรที่เราจะสร้างให้กับคุณสมบัติ
- คอนทรักเจอร์(Constructor) คือ เป็นกำหนดการรูปแบบการเรียกใช้ Class
- เมทธอต(Method) คือ ฟังชั่นก์ หรือ เหตุการณ์ เช่น การตั้งชื่อให้กับสนัข การกำหนดสายพันธุ์ หรือ จะใส่เหตุการณ์ต่างๆก็ได้เช่น การกิน นอน เดินเล่น เห่า เป็นต้น
ให้เรานึกถึงความเป็นจริงในชีวิตของเราว่าสนัขควรมีคุณสมบัติอะไรบ้าง ในที่นี่จะให้สุนัขมีคุณสมบัติ คือ มีชื่อ มีสายพันธฺุ์ มีเมทธอต คือ ตั้งชื่อสุนัขได้ กำหนดสายพันธฺุ์ได้ และสามารถเรียกดู ชื่อ กับ สายพันธุ์ ได้ด้วย
/*
* @author http://javaagkasit.blogspot.com
*/
public class Dog {
//กำหนดคุณสมบัติ(Field)
String Name;
String Breed;
//คอนทรักเจอร์(Constructor)
Dog(){
}
// เมทธอต สำหรับ กำหนดชื่อสุนัข
public void setName(String name){
Name = name;
}
// เมทธอต สำหรับ กำหนดสายพันธุ์
public void setBreed(String breed){
Breed = breed;
}
// เมทธอต สำหรับไว้ให้เรียกดูชื่อสุนัข
public String getName(){
return Name;
}
// เมทธอต สำหรับไว้ให้เรียกดูสายพันธุ์สุนัข
public String getBreed(){
return Breed;
}
}
เมื่อสร้างคลาสเสร็จ เรามาลองเรียกใช้งานคลาส Dog เราจะได้ทราบว่า Object มันคืออะไรกันแน่/**
*class สำหรับ ทดสอบ class Dog
* @author http://javaagkasit.blogspot.com
*/
public class TestDog {
public static void main(String [] args){
Dog d = new Dog(); //สุนักตัวที่ 1
d.setName("มี่มี้"); // ตั้วชื่อว่า มี่มี้
d.setBreed("ชิวาวา"); // สุนักพันธุ์ ชิวาวา
Dog d2 = new Dog(); //สุนักตัวที่ 2
d2.setName("ก้าน"); // ตั้วชื่อว่า ก้าน
d2.setBreed("บางแก้ว"); // หมาพันธุ์ บางแก้ว
System.out.println("สุนักตัวที่ 1");
System.out.println(" ชื่อ :"+d.getName());
System.out.println("พันธุ์ :"+d.getBreed());
System.out.println("สุนักตัวที่ 2");
System.out.println(" ชื่อ :"+d2.getName());
System.out.println("พันธุ์ :"+d2.getBreed());
}
}
เวลาเราจะเรียกใช้ class Dog ก็จะทำการ Dog d = new Dog(); ตัว d นั้นล่ะเค้าเรียก Object ซึ่งออปเจกนี้จะมีคุณสมบัติเหมือนกับที่เรากำหนดไว้ใน class Dog ทุกประการ ในหนึ่งออปเราจะมองให้เป็นวัตถุอย่าง ซึ่ง ออปเจก d ที่เราได้ new เราจะมองเป็นสนุกหนึ่งต้ว
Dog d = new Dog(); //สุนักตัวที่ 1
d.setName("มี่มี้"); // ตั้วชื่อว่า มี่มี้
d.setBreed("ชิวาวา"); // สุนักพันธุ์ ชิวาวา
เป็นการสร้าง ออปเจก สุนัข มาหนึ่งตัว แล้วก็ตั้งชื่อให้มัน โดยการ d.setName("มี่มี้"); แล้วก็ระบุสายพันธุ์ให้มันโดยการ d.setBreed("ชิวาวา"); จะเห็นว่าการที่จะเรียกใช้เมทธอตใน class Dog ได้โดยการใช้ "." พอเรากำหนดชื่อ สายพันธุ์ อยากจะแสดงรายของสุนัขตัวนี้( ออปเจก d)ก็ทำได้ไดย
System.out.println("สุนักตัวที่ 1");
System.out.println(" ชื่อ :"+d.getName());
System.out.println("พันธุ์ :"+d.getBreed());
ผลการรันโปรแกรม
สรุป Class และ Object
Class เป็นการกำหนดคุณสมบัติของวัตถุสิ่งใดสิ่งหนึ่ง และObject ก็เป็นการเรียกใช้ Class นั้นๆโดยที่ object นั้นๆจะมีคุณสมบัติเหมือนกับ class ที่เรียกใช้ทุกประการ
เรื่องที่ควรศึกษาเพิ่มเติม - การใช้งาน Constructor
[Java]การใช้ while loop
คำสั่ง while loop เป็นคำสั่งสำหรับวนลูปอีกแบบจะมีเงื่อนไขการทำงานอยู่ว่า ถ้าเงื่อนไขเป็นจริงทำงานต่อไปเรื่อยๆและจะออกจากลูปเมื่อเงื่อนไขเป็นเท็จ
/**
* โปรแกรมนับเลข 1 - 10
* @author http://javaagkasit.blogspot.com
*/
public class whileloop {
public static void main(String[] args) {
int count = 1 ;
while (true) {
if(count <= 10){
System.out.println(count++);
}else{
break;
}
}
}
}
จากโค้ดด้านบนเป็นโปรแกรมนับเลข 1 ถึง 10 การทำงานก็คือว่า ในลูป while จะวนไปเรื่อยๆภายใน{}ของ while ถ้า count น้อยกว่าหรือเท่า 10 ก็จะปริํนค่า count ออกมาพร้อมทั้งเพิ่มค่า count ขึ้นที่ละหนึ่ง เมื่อใดที่ค่า count มีค่าไม่ได้อยู่ในเงื่อนไข ก็จะออกจากลูป while
ในการใช้คำสั้งวนใดๆก็ตาม จะมี 2 คำสั้งที่เกี่ยวข้อ คือ break กับ continue การใช้งานก็ง่ายนิดเดียว break คือ ออกจากลูป ส่วน continue คือทำงานต่อไป ซึ่งการใช้งานจริงส่วนใหญ่ก็เป็น break ซะมากกว่า continue
ศึกษาเพิ่มได้ที่
- การใช้ if else http://javaagkasit.blogspot.com/2012/08/if-else.html
- การสร้างโปรเจกใน NetBeans IDEhttp://javaagkasit.blogspot.com/2012/09/netbeans-ide.html
- Class และ object คืออะไร
[Java]การใช้ for-each
นอกเหนือจากการใช้ For loop แบบมี ค่าเริ่ม;เงื่อนไข;เพิ่มค่า ยังมีการวนลูปอีกแบบหนึ่งในภาษา Java คือ for - each loop โดยมีรูปแบบคำสั่งดังนี้
for(declaration : expression) {
statement
}
- declaration : เป็นการประกาศตัวแปรทั่วไป เช่น String color
- expression : จะเป็นอาร์เรย์ (array) หรือ Object
- statement : อาจจะเป็น การคำนวน การแสดงค่า(print)
แล้วมันต่างจาก for ธรรมดาอย่างไร ข้อดีของ for-each คือกรณีที่เราต้องการโชว์ข้อมูลใน Array ทั้งหมด for -each จะทำได้ง่ายกว่า อาจจะมองภาพยังไม่ออกลองดูตัวอย่างโค้ดด้านล่าง
/*
* การใช้งาน foreach
* @author http://javaagkasit.blogspot.com/
*/
public class foreach {
public static void main(String [] args){
String [] colors = {"Red","Blue","Pink","Yellow","Orange"};
//for ธรรมดา
for(int i =0 ; i< colors.length ;i++){
System.out.println(colors[i]);
}
//for -each
for(String c : colors){
System.out.println(c);
}
}
}
จากโค้ดด้านบน จะเห็นได้ว่าการใช้ for-each จะทำได้ง่ายและเร็วกว่าการใช้ for ธรรมดา แต่ในทางกลับกันในความสะดวกสะบายของ for - each ยังมีข้อเสียอยู่ ในกรณี ถ้าเราต้องการแสดงเฉพาะตำแหน่งเราต้องการโชว์ เช่น โชว์เฉพาะตำแหน่ง colors[0] จะทำไม่ได้
เนื่้อหาที่เกี่ยวข้อง
- การใช้ for http://javaagkasit.blogspot.com/2012/08/for.html
- การใช้ switch casehttp://javaagkasit.blogspot.com/2012/08/switch-case.html
- การใช้ if else http://javaagkasit.blogspot.com/2012/08/if-else.html
- การใช้ if else if http://javaagkasit.blogspot.com/2012/08/if-else-if.html
[JAVA] Inception Watch step by step
วันนี้เราจะมาทำโจทย์ Inception Watch แบบ step by step
โจทย์ Inception Watch สามารถดาวโหลดได้ที่ลิงค์ http://goo.gl/48Zvudจากบทความเดิมที่ผมเคยเขียนไว้ ACM InceptionWatchQ JAVA วิธีทำ คือ ให้คำนวณกลับจากชั้นสุดท้ายมายังชั้นแรก ในชั้นสุดท้าย (level n) จะคำนวณเวลาของ Tsk ที่ชั้นนั้นได้โดยตรง ส่วนชั้น n-1 ต้องเอาเวลาทั้งหมด(elapsed time) ของชั้น n หารด้วย 12 แล้วบวกกับ Tnext ของชั้นนั้น ก็จะได้ Tsk ของชั้น n-1
อ่านแล้วคงรู้งงๆมาลองคำนวน เพื่อจะช่วยให้เห็นภาพมากขึ้น ซึ่งมองภาพการเขียนโปรแกรมของเราได้ชัดเจนมากยิ่งขึ้นด้วย
1.การวิเคราะห์โจทย์และลองคำนวณผลลัพธ์ด้วยมือก่อนเขียนโปรแกรม
1.1 แปลงเวลาทั้งหมดให้เป็นหน่วยวินาทีทั้งหมดของทุกๆชั้น
โดยอ้างอิงจากโจทย์ตัวอย่างต่อไปนี้
1 48 m
2 6 h
3 2 d
4 24 d
-1
หน่วยเวลาทีควรรู้นะครับ
1 นาที(m) = 60 วินาที
1 ชั่วโมง(h) = 3600 วินาที ->ได้จาก 60*60
1 วัน(d) = 86400 วินาที ->ได้จาก 24*60*60
1 ปี(y) = 31536000 วินาที ->ได้จาก 365*24*60*60
ผลจากการแปลงให้อยู่ในหน่วย วินาที ก็จะได้ตัวเลขดังนี้
0 0
1 2880
2 21600
3 172800
4 2073600
1.2 การคำนวน inception watch โดยใช้สูตร
sum = sum / 12 +incept[i - 1].getNumSecond();
โดยกำหนดให้
sum คือ ตัวแปรสำหรับเก็บผลลัพธ์
Incept[i - 1].getNum() คือ จำนวนเวลาในหน่วยวินาที ในชั้นรองจากชั้นปัจจุบันที่เราอยู่
i คือ ชั้นปัจจุบันที่เราอยู่
getNumSecond () คือ เป็นฟังก์ชันก์สำหรับการดึงจำนวนเวลาในหน่วยวินาทีของชั้น i -1
Incept คือ เป็น object ที่เก็บลำดับชั้นจำนวนเวลาในวินาที
วิธีทำ
เริ่มจากชั้นที่ 5ค่า ณ ปัจจุบัน sum = 0 , Incept[i - 1].getNum() = 2073600, i = 5
แทนค่า sum = 0/ 12 + 2073600
sum = 2073600;
ชั้นที่ 4
ค่า ณ ปัจจุบัน sum = 2073600 , Incept[i - 1].getNum() = 172800 , i = 4
แทนค่า sum = 2073600 / 12 + 172800
sum = 345600
ชั้นที่ 3
ค่า ณ ปัจจุบัน sum = 345600 , Incept[i - 1].getNum() = 21600 , i = 3
แทนค่า sum = 345600 / 12 + 21600
sum = 50400
ชั้นที่ 2
ค่า ณ ปัจจุบัน sum = 50400 , Incept[i - 1].getNum() = 2880 , i = 2
แทนค่า sum = 50400 / 12 + 2880
sum = 7080
ชั้นที่ 1
ค่า ณ ปัจจุบัน sum = 7080 , Incept[i - 1].getNum() = 0 , i = 1
แทนค่า sum = 7080 / 12 + 0
sum = 590
เป็นอันเสร็จการคำนวน แล้วเราจะมาแสดงค่ายังไงล่ะ เราก็เรียงจากด้านล่างไปด้านหน้าก็จบ
590
7080
50400
345600
2073600
ส่วนการทำให้ได้ตัวเลขแสดง 10 หลักอ่านลงไปด้านล่างของบทความก็จะเจอครับ
[Java] ACM CommonPermutationQ
The Problem
Given two strings a and b, print the longest string x of letters such that there is apermutation of x that is a subsequence of a and there is a permutation of x that is a
subsequence of b.
Sanple Input / Output
source code
import java.util.Scanner;
import java.util.Arrays;
/**
*
* @author http://www.javaagkasit.blogspot.com/
*/
public class CommonPermutation {
int[] d = new int[1000];
static String strtemp;
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
CommonPermutation cp = new CommonPermutation();
while (true) {
String[] a = (sc.nextLine()).split("");
String[] b = (sc.nextLine()).split("");
if (a.length <= 1000 | b.length <= 1000) {
int c = 0;
char[] out = new char[a.length];
for (int i = 1; i < a.length; i++) {
for (int j = 1; j < b.length; j++) {
if (cp.check(j) == false) { //not in store index
if (a[i].equals(b[j])) { //if chalacter
s1[i] == s2[j]
out[c++] = b[j].charAt(0);//then store output
cp.store(j); //then store index
break; //then stop Search
}
} else {
continue;
}
}
}
cp.printout(out, c);//print output
cp.clearArr(); //clear arrays store index
System.out.println();
}
}
}
public boolean check(int i) {
boolean c = true;
int m = Arrays.binarySearch(d, i);
if (m < 0) {
c = false;
}
return c;
}
public void printout(char[] s, int c) {
char[] ans = new char[c];
for (int i = 0; i < ans.length; i++) {
ans[i] = s[i];
}
Arrays.sort(ans);
System.out.print(ans);
}
public void store(int p) {
int c = 0;
d[c++] = p;
Arrays.sort(d);
}
public void clearArr() {
for (int i = 0; i < d.length; i++) {
d[i] = 0;
}
}
}
Download source code here !!!
Subscribe to:
Comments
(
Atom
)

1 comment :
Post a Comment