วันศุกร์ที่ 8 กรกฎาคม พ.ศ. 2554

Package ของ Java

1.  ให้ศึกษา Package ของ Java โดยเน้นหนักไปที่ package scope  ของ attributesและ methods ที่อยู่ใน Package  ให้เขียนคำตอบลงใน blog

Package

        เป็นไฟล์ที่ใช้เก็บรายชื่อ class ที่การนำมาใช้ในงานเดียวกันหรือมีวัตถุประสงค์ในการทำงานคล้ายกัน เพื่อให้สะดวกแก่การใช้งานได้สะดวกและรวดเร็ว รวมทั้งยังสามารถกำจัดปัญหาเกี่ยวกับชื่อclass ที่ซ้ำกันได้ด้วย (ชื่อclass สามารถใช้ซ้ำกันได้ ถ้าอยู่ต่างclassกัน)
      
        ข้อกำหนดของการตั้งชื่อ class ในจาวาคือ ชื่อจะต้องไม่ซ้ำกันในแต่ละโปรแกรม ซึ่งเมื่อมีการสร้างโปรแกรมมากขึ้น โอกาสที่ชื่อclassจะซ้ำกันมีสูง เพื่อหลีกเลี่ยงปัญหานี้ จึงมีคำสั่ง "Package" เพื่อใช้เก็บรายชื่อ Class ต่างๆ ที่ใช้ทำงานประเภทเดียวกันไว้ด้วยกัน เมื่อต้องการใช้งาน Class ใดๆ ก็สามารถเรียกใช้ Package ที่เก็บ class ขึ้นมาในโปรแกรม จากนั้นจึงเรียกใช้ method ต่างๆใน class นี้อีกที ทำให้สามารถตั้งชื่อ Class หรือ Method ซ้ำกันได้ (ถ้าเก็บไว้ในต่าง Package กัน และไม่เรียกใช้พร้อมกัน ถ้ามีการเรียกใช้พร้อมกันในโปรแกรมเดียวกัน เมื่อ compile โปรแกรมจะไม่มีผลใดๆ แต่เมื่อเรียกใช้งานโปรแกรมนี้ เมื่อใดจะเกิด Error ฟ้องมาทันที)

     การใช้คำสั่ง "Package"     
                   package MyPackage;

     โดย 
            package            เป็นคำสั่ง
            MyPackage      เป็นชื่อ Package ที่ตั้งขึ้นมา โดยชื่อ Packageนี้จะเป็นชื่อ Directory ที่ใช้เก็บชื่อ Class ต่าง (.class) เช่น จากตัวอย่างจะต้องสร้าง Directory ชื่อ MyPackage ขึ้นมาด้วย โดยโปรแกรมที่ compile เสร็จแล้วให้นำมาเก็บไว้ใน Directory ที่ระบุไว้ในคำสั่ง Package ด้วย
           ระวัง! ชื่อ Package ต้องตรงกันทั้งตัวอักษรพิมพ์เล็กและพิมพ์ใหญ่
           กรณีที่ต้องการสร้าง Package แบบลำดับชั้น (คือมี subdirectory) ให้ใช้เครื่องหมายจุด(.)คั่นระหว่างชื่อด้วย


                 Ex.                                      package SNSD.pics.Sunny;

                - โปรแกรมที่ compile เสร็จ จะต้องเก็บไว้ใน directory ชื่อ "SNSD\pics\Sunny" เท่านั้น



การป้องกันใน Package
          
            ในการเรียกใช้ method ต่างๆของแต่ละ class หรือแต่ละ package นั้น จะมีการกำหนดค่า Accessibility ไว้ด้วย ทั้งนี้จะแยก Class ออกเป็น 5 กลุ่ม ได้แก่
            1. class เดียวกัน
            2. subclass ใน package เดียวกัน
            3. ไม่เป็น subclass แต่อยู่ใน package เดียวกัน
            4. subclass ที่อยู่ต่าง package เดียวกัน
            5. class ที่อยู่ต่าง package กัน และไม่เป็น subclass
           
            สำหรับค่า Accessibility แบ่งออกเป็น 4 ชนิด ได้แก่
           1. Public         เรียกใช้ variable หรือ method ได้ไม่ว่าอยู่ class หรือ package ใดก็ตาม
           2. Private        เรียกใช้ variable หรือ method ได้เฉพาะภายในclass เท่านั้น class อื่นเรียกใช้ไม่ได้
           3. Protect       ใช้ได้เหมือน Public รวมทั้ง class ที่เป็น subclass แต่กรณีที่อยู่ต่าง package กัน จะใช้ไม่ได้
           4. Default        กรณีที่ไม่กำหนดค่า Accessibility ไว้ จะหมายถึงค่า default โดยจะใช้ได้เฉพาะ class และ subclass ที่อยู่ใน package เดียวกัน (ต่าง package จะใช้ไม่ได้)


ตารางในการสรุปความสามารถในการเรียกใช้ variable หรือ method ร่วมกันของ class และ subclass ต่างๆ

วันศุกร์ที่ 1 กรกฎาคม พ.ศ. 2554

การสร้าง Bean ใน NetBeans

การสร้าง Bean ใน NetBeans
 1. สร้าง Projectใหม่ ไปที่ File -- New Project


2. เลือก Java Application หลังจากนั้น กด Next


 3. ตั้งชื่อโปรเจ็คที่ต้องการเลือกพื้นที่ที่จะบันทึก จากนั้นให้กด Finish


4. click ขวาที่ชื่อโปรเจ็ค ทางด้ายซ้ายมือ แล้วทำการเลือก New -->>JFrame Form


5. ตั้งชื่อ Class แล้วกด Finish

6. ทำการ import file beans เข้ามาใน NetBeans ให้เลือก Tool-->>Palatte-->>AWT Components


7. ทำการคลิ๊กที่ Add from JAR


8. จากครั้งที่แล้วที่ได้สร้างโปรแกรม CounterBeans ที่นำมาประกอบมี OurButton (อยู่ใน buttons.jar) , Counter (อยู่ในCounter.jar)และ TickTock(อยู่ใน misc.jar) ทำการเลือกไฟล์ .JAR ทั้ง3ไฟล์แล้วกด Next


9. โปรแกรมจะแสดงตัว Beans ทั้งหมดจากไฟล์ .JAR ถ้าไม่พบไฟล์ที่ต้องการ ให้เลือกติ๊กที่ Show All JavaBeans ด้านล่างก่อนแล้วเลือก Beans ที่ใชั้ทั้ง 3 ตัว คือ Counter ,OurButton, TickTock ตามภาพ


10. จะแสดงผลใน Category ใด เลือกใส่ไว้ใน Beans กด Finish


 หมายเหตุ >> จะพบว่า Beans ทั้งหมดถูก import เข้ามาในกล่อง Palette ช่อง Beans ด้านขวามือบน

11. . ต่อไปเป็นการประกอบตัวหน้าตาโปรแกรม โดยการลาก Beans ที่ Import เข้ามาจัดวางลงในหน้าต่างส่วนกลาง โดยเริ่มต้นที่ลากปุ่มมาใส่จาก Beans OurButtonตั้งค่า Propertie ในกล่องด้านขวามือ ช่อง Label เพื่อเปลี่ยนข้อความบนปุ่ม
สร้าง 3 ปุ่มคือ Start Stop และ Reset


 12. ลาก Counter มาจัดวาง แล้วทำการปรับขนาดให้เรียบร้อย


 13.  ทำการลาก TickTock มาวาง ซึ่งจะไม่ปรากฏบนหน้าต่าง Interface
ปรับค่า Intervalในกล่อง Properties ด้านขวามือเป็น 1 (เพิ่มขึ้นทีละ1)


14.กล่อง Inspector ด้านซ้ายมือล่าง คลิกขวาที่ tickTock1 (ตัว Object Beans TickTock)
เลือก Events -- PropertyChange -- propertyChange


15.  มันจะสร้าง Method tickTock1PropertyChange ซึ่งสามารถเรียกใช้งาน Eventได้ ทำการเรียก increment มาใช้งาน โดยเขียนเป็น ชื่อ Counter.increment(); (ชื่อCounter ของเราคื่อ counter1 จากข้อเมื่อกี้ได้กล่าวไว้)
 

 16. ต่อไปเป็นการกำหนด Event ให้กับปุ่มทั้ง 3คลิกขวาที่กล่อง Inspector ด้านซ้ายมือล่าง เลือกปุ่มแรกที่ชื่อว่า ourButton1 เลือก Events -- Action -- actionPerformed

17. มันจะสร้าง Method ให้เหมือนเดิม กำหนดให้ Counter เริ่มทำ ใช้คำสั่ง ชื่อCounter.start();

อีก 2 ปุ่มทำเหตุการณืเดียวกันแต่เปลี่ยนคำส่ง Event เป็น
ชื่อCounter.stop();
เพื่อหยุด และ ชื่อCounter.reset(); เพื่อเคลียร์ค่า
 18. เสร็จแล้วทำการเปิดดูโปรแกรมด้วยการคลิกขวาที่ Form เลือก Run File หรือกด Shift + F6


สุดท้ายจะได้ผลลัพธ์ของโปรแกรม : กดStop เพื่อหยุด, กดResetเพื่อเคลียร์ค่าเป็น0,กดStartเพื่อเริ่มใหม่



วันพุธที่ 29 มิถุนายน พ.ศ. 2554

การนำ Bean มาใช้ใน Bean Box

หลังจากนั่งมึนๆงงๆ กับ data warehouse ที่ยังไม่เสร็จจนถึงตอนนี้ ผมก็เลยตัดสินไม่ทำแล้วมานั่งเขียน Blog ดีกว่าครับ วันนี้เราจะพูดถึง BeanBox คือโปรแกรมช่วยสร้างโปรแกรมโดยการลากว่าง และเราสามารถเพิ่ม Bean เข้าไปในโปรแกรมได้ครับ ในตัวอย่างต่อไปจะเป็นการนำเอา Counter จาก Blog ที่แล้วมาใช้ ไปดูวิธีการกันเลยครับ
1. นำ JAR ไฟล์ที่เป็น Bean ใส่ไว้ในโฟลเดอร์ beans\jars ในตัวอย่างจะเป็น Counter.jar

2. กลับไปที่โฟลเดอร์ \beans\beanbox ดับเบิลคลิก run.bat โปรแกรมจะรันขึ้นมาได้ดังภาพ
สังเกต ToolBox ด้านซ้ายมือจะมี Bean ชื่อว่า Counter ซึ่งเป็น Bean ที่ได้เพิ่มเข้าไปจากในข้อ 1
3. ทำการเพิ่ม Bean Counter เข้ามาใน BeanBox โดยคลิกที่ Bean ที่ต้องการใน ToolBox และมาคลิกที่ตำแหน่งที่ต้องการใน BeanBox
4. สร้างปุ่ม ExpliciButton จำนวน 3 ปุ่ม โดยวิธีเช่นเดียวกับ ข้อ 3 จะได้หน้าตาโปรแกรมดังภาพ

5. ทำการเปลี่ยน Label ของปุ่มทั้งสามปุ่ม โดยการแก้ไขค่า label ในหน้าต่าง Properties
6. แก้ไข Label อีกสองปุ่มที่เหลือเป็นดังภาพ

7. เพิ่ม Bean TickTock เข้ามาใน BeanBox และกำหนด Properties interval เป็น 1
8. ทำการกำหนด Event ให้กับปุ่ม เริ่มต้นที่ปุ่ม Start โดย การคลิกที่ปุ่ม และเลือก Edit > Events > button push > actionPerfrom
คลิกที่ Counter
จะพบหน้าต่าง EventTargetDialog ให้เลือกที่ start
9. ทำการกำหนด Event ของอีกทั้งสองปุ่มเช่นเดียวกับปุ่ม Start ในข้อ 8 แต่ ปุ่ม Stop เลือก method stop และ ปุ่ม Reset ให้เลือก method reset

10. ทำการกำหนด Event ให้กับ TickTock โดยการคลิกที่ TickTock และเลือก Edit > Events > propertyChange > propertyChange และคลิกที่ Counter ดังภาพ
เลือกที่ increment ดังภาพ
11. จะสังเกตเห็นว่า Counter จะเพิ่มขึ้นทุก 1 วินาที และเมื่อทดลองกดปุ่ม Stop Counter ก็จะหยุดการนับค่า เมื่อกดปุ่ม Reset ค่าก็จะกลับมาเริ่มต้นที่ 0
ถ้าทำตามขั้นตอนก็จะได้ผลดังที่กล่าวมาครับ วันนี้พอแค่นี้ดีกว่าครับ data warehouse ยังไม่เสร็จ (แย่แล้วแหละครับ = =) ขอไปทำก่อนนะครับ ติดตามได้ตอนต่อไปขอบคุณครับ

วันจันทร์ที่ 27 มิถุนายน พ.ศ. 2554

กาสร้างไฟล์ JAR สำหรับ Java Bean


สวัสดีครับ วันนี้เรามาสร้าง Bean ใช้กันดีกว่าครับ หลายคนอาจสงสัยว่าเจ้า Bean นั้นคืออะไร Bean ก็คือ class ของ java นั่นแหละครับ แต่จะมีวิธีการเขียนและนำไปใช้งานแตกต่างกับ class ปกติครับ การเขียน Bean จะมีกฎอยู่ 3 ข้อแต่ผมไม่ขอพู้ถึงครับ สามารถอ่านได้ในบทความนี้ครับ http://thaiprogrammer.blogspot.com/2008/09/3-java-bean-class.html และต่อไปนี้จะเป็นการสร้าง Bean เป็น JAR ไฟล์เพื่อนำไปใช้งานต่อไปครับ

1. ทำการเขียน class ที่ต้องการนำมาทำเป็น Bean ในตัวอย่างนี้ ใช้ Counter.java มี Code โปรแกรมดังนี้

package counter;

import java.awt.*;

public class Counter extends Canvas implements java.io.Serializable {

private final static int XPAD = 10;

private final static int YPAD = 10;

private int count;

private boolean operate;

public Counter() {

count = 0;

operate = true;

}

public void reset() {

count = 0;

repaint();

}

public void start( ) {

operate = true;

}

public void stop() {

operate = false;

}

public synchronized void increment() {

if(operate) {

++count;

adjustSize();

repaint();

}

}

public void setFont(Font font) {

super.setFont(font);

adjustSize();

}

/*

public Dimension getPreferredSize() {

Graphics g = getGraphics();

FontMetrics fm = g.getFontMetrics();

int w = fm.stringWidth("" + count) + 2 * XPAD;

int h = fm.getHeight() + 2 * YPAD;

return new Dimension(w, h);

}

*/

private void adjustSize() {

Dimension d = getPreferredSize();

setSize(d.width, d.height);

Component parent = getParent();

if(parent != null) {

parent.invalidate();

parent.doLayout();

}

}

public void paint(Graphics g) {

Dimension d = getSize();

FontMetrics fm = g.getFontMetrics();

int x = (d.width - fm.stringWidth("" + count))/2;

int y = (d.height + fm.getMaxAscent() -

fm.getMaxDescent())/2;

g.drawString("" + count, x, y);

g.drawRect(0, 0, d.width - 1, d.height - 1);

}

}


2. สร้างไฟล์ Manifest เป็นไฟล์ที่บอกถึงคุณลักษณะต่างของ JAR ไฟล์นั้นๆ เขียน code ดังนี้

Main-Class: counter.Counter

Name: counter/Counter.class

Java-Bean: True



บรรทัดสุดท้ายจำเป็นต้องขึ้นบรรทัดใหม่ 1 8ครั้ง และเซฟไฟล์ชื้อ Counter.mf

3. หลังจากสร้างไฟล์ทั้งสองเราก็ได้ไฟล์ดังภาพ

4. เปิด Command Prompt ขึ้นมา

สมมติว่า path ที่จะสร้าง JAR อยู่ที่ C:\Users\Admin\Desktop\Component\ex3\bean
cd C:\Users\Admin\Desktop\Component\ex3\bean (ถ้าไฟล์อยู่ที่อื่นให้ใช้ path นั้นๆ)
javac –d . Counter.java
คำสั่ง compile และ –d หมายถึงสร้าง โฟลเดอร์ตาม package ที่อยู่ใน source code
jar –cfm Counter.jar Counter.mf .\counter\*.*
คำสั่งสร้าง JAR File

ถ้าคำสั่งถูกต้อง จะได้ไฟล์ในโฟลเดอร์ดังภาพ และจะได้ Counter.jar ตามที่ต้องการ

วันอาทิตย์ที่ 26 มิถุนายน พ.ศ. 2554

ตัวอย่าง java class library ที่สร้าง Object โดยใช้แนวคิดแบบ Factory Method

                 ในภาษาจาวานั้น มีอยู่หลายๆ class ที่มีการนำแนวคิด Factory Method มาใช้ในการสร้าง Object ของมัน ซึ่งในที่นี้จะขอยกตัวอย่างซัก 2 class คือ class Calendar และ class
                class Calendar นั้นอยู่ในแพคเกจ  java.util.Calendar ซึ่งเราสามารถใช้งาน class นี้เพื่อเรียกดูเวลาของเครื่องที่เราใช้อยู่ได้ และสามารถจัดเป็น format ต่างๆที่เราต้องการได้อีกด้วย และจากรูปเราจะเห็นว่าการสร้าง Object ของ class Calendar นั้นใช้คำสั่ง getInstance() แทนที่จะใช้คำสั่ง new Calendar()

                    ส่วน class ControlFactory นั้นอยู่ในแพคเกจ javax.naming.ldap.ControlFactoryซึ่งเป็น class ซึ่งเอาไว้สร้างออบเจคของคอนโทรลแบบ LDAPv3 ซึ่งถูกกำหนดโดย RFC2251 และจากรูปเราจะเห็นว่าการสร้าง Object ของ class ControlFactory นั้นใช้คำสั่ง getControlInstance() แทนที่จะใช้คำสั่ง new ControlFactory()

การใช้งาน Design Pattern ใน NetBeans

จากบทความในครั้งก่อนๆที่เคยกล่าวไว้ว่าNetBeansสามารถช่วยให้การทำงานของโปรแกรมเมอร์นั้นมีความสะดวกสบายมากกว่าการใช้ Text Editer ในการเขียนโปรแกรม …. ในวันนี้ผมจะมานำเสนออีก Feature หนึ่งที่ช่วยให้การทำงานของโ)รแกรมเมอร์อย่างเราๆ มีความสะดวกสบายขึ้นไปอีก นั่นก็คือ การใช้ UML บน NetBeans ซึ่งช่วยให้เรา สามารถวาด UML ต่างๆ ตลอดจนการทำโปรแกรมของเราให้เป็นไปตาม Design Pattern แบบต่างๆ ได้อีกด้วย …. น่าสนใจใช่ไหมครับ งั้นเราไปดูวิธีติดตั้ง และตัวอย่างขั้นตอนการทำ Design Pattern บน NetBeans กัน

วิธีติดตั้ง
1.    ไปดาว์นโหลด plugins ทั้ง 16 ตัวที่ต้องใช้จาก http://dlc.sun.com.edgesuite.net/netbeans/updates/6.7.1/uc/final/beta/modules/uml6/
ซึ่งรองรับเวอร์ชั่น 6.xxx นะครับ (7.xxx ยังไม่รองรับ )
2.     หลังจากนั้นในโปรแกรม NetBeans ให้เลือกที่ Tools > Plugins > Download จากนั้นให้ Browse ทั้ง 16 files นั้นมา แล้วจัดการติดตั้งให้เรียบร้อย

ตัวอย่างและวิธีการใช้งาน
ในการแสดงตัวอย่างและวิธีการใช้งานนั้น จะขอยกเอา Design Pattern แบบ Singleton มาประกอบ
1.ทำการสร้างโปรเจคใหม่ขึ้นมาก่อนจากนั้นจึงทำการเพิ่ม class MySingleton เข้าไป
2.คลิกขวาที่โปรเจคของเรา แล้วเลือก Reverse Engineer



3.จะมีหน้าต่างขึ้นมา ให้เรากด OK ไป  NetBeans จะทำการสร้างอีกโปรเจคหนึ่งเป็นโปรเจคที่เอาไว้แสดง UML ของโปรเจคเรานั่นเอง

4.จากนั้นที่ UML Project ให้คลิกขวาที่ Model จากนั้นเลือก Apply Design Pattern


5.จากนั้นให้เราสามารถเลือก Design Pattern ที่เราจะใช้ได้ตามที่ต้องการซึ่งในที่นี้จะเลือกเป็น Singleton



6.ในข่องของ namespace ก็ให้เราทำการเลือกโปรเจคที่จะนำมาเชื่อมโยงกับ Design Pattern


7.ในขั้นนี้เราก็จะสามารถเลือกได้ว่าจะให้ class ไหนเป็น Singleton ซึ่งเราจะเลือก class MySingleton ที่ได้สร้างไว้ตอนต้น


8.จากนั้นให้ติ๊กในช่อง create class diagram เพื่อให้ NetBeans สร้าง class diagram ออกมาตาม Design Pattern ที่เราเลือกใช้




9.สุดท้าย เราสามารถให้ NetBeans ช่วย generate code ที่สอดคล้องกับ Design Pattern โดยคลิกขวาที่ UML project แล้วเลือก Generate Code



10.เมื่อกลับไปดูที่โปรเจคของเราจะพบว่ามีการ Generate Code ที่สอดคล้องกับ Design Pattern Singleton ไว้เรียบร้อยแล้ว