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

Package Scope : JAVA

Package Scope Java

ทำความรู้จักกับ Package กันก่อน ^^

เจ้า Package นี้ก็คือ การนำ Class ที่มีลักษณะการทำงานเหมือนกัน นำมาจัดกลุ่มรวมกัน เพื่ออำนวยความสะดวก แก่ผู้เรียกใช้งาน ยกตัวอย่างในชีวิตประจำวัน เรื่องการ การเคลื่อนไหวของร่างกาย ขั้นแรกเราต้องการที่จะวิ่ง เราก็ต้องเรียกใช้ Method ใน Class การวิ่ง แต่ขณะวิ่งเราต้องการที่จะโบกไม้โบกมือด้วย เราก็ต้องไปเรียก Method ในการโบกมือใน Class การเคลือนไหวของมือ เห็นไหมครับว่า ถ้าเรารวม Class ทั้ง 2 Class เข้าด้วยกันเป็น Package ที่ชื่อว่า การเคลือนไหวของร่างกาย แล้วเรียกใช้ เราก็จะสามารถที่จะใช้ ทั้ง 2 Method โดยการเรียกใช้ผ่าน Package เพียงครั้งเดียว โอ่เจ้า Package นี้มันชั่งเยี่ยมยอดเหลือเกิน
ใน Java เมื่อเราต้องการจะเรียกใช้ Package ใน Class ใด เราต้อง Import เจ้าชื่อ Package ชื่อนั้น เพื่อขอใช้ คุณสมบัติใน Package นั้นๆ




รูปตัวอย่างแสดงการเรียกใช้ Package


ต่อไปเราก็ต้องไปรู้จักกับเจ้า Encapsulation กันต่อ

Encapsulation คือ การปกป้องการเข้าถึงของข้อมูล จากภายนอกใน Java จะมี Keyword ที่ช่วยป้องกันการเข้าถึงข้อมูลอยู่ 3 ตัว คือ
1. public    >> สาธารณะ  หมายความว่า ใครก็สามารถเข้าถึงข้อมูลที่ public ไว้ได้
2. private >> ส่วนตัว      หมายความว่า ผู้ที่สามารถเข้าถึงข้อมูลที่ private ไว้นั้น 
ต้องอยู่ใน Class เดียวกัน
3. protected >> ปกป้อง      หมายความว่า ผู้ที่สามารถเข้าถึงข้อมูลที่ protected นี้ได้ จะต้องเป็นผู้ที่อยู่ในสายพันธ์เดียวกันเท่านั้น    
ส่วนวิธีการใช้งาน คือ นำ Keyword เหล่านี้ไปวางไว้หน้า Attribute หรือ Method ที่ต้องการป้องกันการเข้าถึงข้อมูล ตัวอย่างเช่น

>> public  String telephoneNumber;// ประกาศ ตัวแปร telephoneNumber เป็นประเภท String ใครๆ ก็สามารถเข้าใช้ได้
>> private int age; // ประกาศ ตัวแปร age เป็นประเภท integer สามารถเรียกใช้ได้ในเฉพาะ Class นี้เท่านั้น
>> protected double weight;// ประกาศ ตัวแปร weight เป็นประเภท double สามารถเรียกใช้ได้ใน สายพันธ์เดียวกัน
>> public void countNumber();// ประกาศ method ชื่อ countNumber คืนค่าเป็น void ทุกคนสามารถเรียกใช้ได้
>> private int countDog(); // ประกาศ method ชื่อ countDog คืนค่าเป็น integer เรียกใช้ได้เฉพาะ ใน Class เดียวกัน
>> protected String getNameDog();//ประกาศ method ชื่อ getNameDog  คืนค่าเป็น String สายพันธ์เดียวกันเท่านั้นที่สามารถเรียกใช้ได้

ต่อด้วยเจ้า Inheritance

Inheritance หมายถึง การสืบทอดคุณลักษณะ เรียกได้ว่าเป็นจุดเด่นอย่างหนึ่งของ OOP เลยก็ว่าได้ โดยสามารถสร้างคลาสหลักขึ้นมา 1 Class แล้วกำหนดให้มีคุณสมบัติต่างๆ ที่จำเป็นต้องมี จากนั้น จึงสร้าง Class อีกคลาสหนึ่งขึ้นมาเพื่อรับคุณสมบัติทั้งหมดจาก Class หลัก โดย Class ย่อยนี้สามารถ ที่จะเพิ่มเติมคุณสมบัติ ต่างๆ เพิ่มเข้าไปได้ด้วย ซึ่ง Class หลักนี้เราจะเรียกว่า “Super Class” ส่วน Class ย่อยนี้ เราจะเรียกว่า “Sub Class”
รูปภาพแสดงการ สืบทอดคุณลักษณะ โดย Class B และ Class C สืบทอดจาก Class A

และสุดท้าย คือเจ้า Polymorphism

Polymorphism ก็คือ หมายถึง คุณสมบัติแห่งความหลากหลาย ใน Java นั้น ในการใช้ Polymorphism ก็คือการ Overriding คือ การที่ Sub Class ที่สืบทอดคุณสมบัติจาก Super Class มีชื่อ Method เหมือนกัน แต่ขั้นตอนการทำงานต่างกัน


รูปภาพแสดงการทำ PolymorPhism


แล้วเจ้า Package Scope หล่ะ ตกลงมัน คืออะไร ???
เจ้า Package Scope นี้ก็จะใช้ Encapsulation ,Inheritance  และ Polymorphism เหมือนกัน เพราะอย่างที่เราได้กล่าวไว้ในข้างต้นว่า Package ก็คือการรวมเอา Class หลายๆ Class ซึ่งมีลักษณะการทำงานคล้ายกัน เข้าไว้ด้วยกัน ดังนั้นวิธีการใช้ ก็จะใช้เทคนิดเดียวกันกับ Object Oriented Programming มาสร้าง Package นั่นเอง


โปรดติดตามตอนต่อไป >>>


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

Counter Bean

เริ่มต้นกันเลย โดยการนำไฟล์ Counter.java มา compile run เพื่อให้ได้มากับเจ้าไฟล์ Counter.jar


ส่วนลายละเอียด ไฟล์ Counter.mf ก็ตามนี้เลย **อย่าลืม enter ในบรรทัดสุดท้ายนะครับ


เปิดไฟล์ run.bat ขึ้นมาเลยตามรูปภาพจะเห็นได้ว่า toolbox จะมี counter มาให้เลือกเลย


เริ่มต้นกับการจัดวางและวาดๆๆๆ โดยกดที่ counter จับมาวางที่ BeanBox  เลือก ourbutton มาวางๆๆและที่สำคัญคือ ticktock ตัวนับเวลานั่นเอง พอจับวางแล้ว เราเลือกแต่ละตัวเลยเพื่อที่จะเลี่ยนชื่อให้กับมัน ที่ label เป็น start stop and reset ส่วน ticktock ปรับให้เป็น 1 จะได้ประมาณรูปนี้เลย



คราวนี้เรามาเข้าแต่ละตัวกันเลย เริ่มที่
start : edit => events => mouse => mouseclicked แล้วเชื่อมโยงไปยัง counter => start => OK



stop : edit => events => mouse => mouseclicked แล้วเชื่อมโยงไปยัง counter => stop => OK



reset : edit => events => mouse => mouseclicked แล้วเชื่อมโยงไปยัง counter => reset => OK



ticktock : edit => events => propertyChange => propertyChange แล้วเชื่อมต่อกับ increment => OK



หลังจากนั้นจะพบกับความสำเร็จ ลองเล่นๆดูนะครับ


สร้าง design patterns ใน eclips

ก่อนเริ่มต้นในการใช้งานผมขอแนะนำว่าให้ติดตั้ง plugin กันก่อนเลย เพราะในโปรแกรม eclipse นั้นไม่ได้สร้างรูปแบบไว้ให้ วิธีการติดตั้ง plugin เริ่มต้นไป download ตัว zip ที่ชื่อ patternbox 1.1.6.zip จาก http://www.patternbox.com/eclipse.html  หลังจาก โหลดเรียบร้อยแล้วก็แตกไฟล์ไปใส่ใน directory ที่เก็บโปรแกรม eclipse => plugins จะได้ดังรูป

หลังจากนั้นค่อยรันโปรแกรม eclipse ขึ้นมาใช้งานต่อไป

วิธีใช้ plugin design patterns in eclipse

1. เริ่มต้นด้วยการ สร้างโปรเจคกันใหม่เลย ในที่นี้ผมใช้ชื่อโปรเจคว่า Test หลังจากนั้นก็สร้างตัว design pattern โดยการ new => Other... 


2. จะมีหน้าต่าง new ออกมาเราจะเลือก design pattern wizard => next

3. ผมได้เลือก design pattern เป็น facade

4. ในช่องของ container คือที่เก็บไฟล์ ในที่นี้คือ Test

5. จะได้หน้าต่างว่าเราได้สร้างตัว design pattern แล้ว

6. เลือก subsystem แล้วกด add ผมตั้งชื่อเป็น FacadeTest และกด finish

7. เรียบร้อยหน้าต่างพร้อมใช้งานครับ

วันพฤหัสบดีที่ 23 มิถุนายน พ.ศ. 2554

รู้จักกับ Factory Method . . .

Factory Method คืออะไรกัน

จริงๆแล้ว Factory Method ก็คือ คำสั่งที่ถูกสร้างขึ้นเพื่อนำมาใช้ในการสร้าง Object แทนที่เราจะสร้าง Object นั้นๆ โดยใช้ Constructor ของมันเอง ซึ่ง Factory Method นี้ก็จะเป็นพื้นฐานของ Design pattern ตัวอื่นๆด้วย เช่น Singleton เป็นต้น

Java and Factory Method

ในภาษา Java นั้นก็จะมีคลาสบางคลาสที่มีคำสั่งที่เป็น Factory Method โดยคลาสดังกล่าวจะจัดเตรียมเจ้าตัว Factory Method ไว้ให้ผู้ใช้เรียกใช้ได้หรือบางคลาสเองก็อาจจะเป็น Factory Class ได้เช่นกัน โดยผมจะขอยกตัวอย่างคลาสที่มี Factory Method ไว้ให้เรียกใช้จำนวน 2 คลาส ดังนี้

1.
Class DateFormat ใน Java package “Java.text” โดย class DateFormat นี้จะเป็นตัว abstract class ที่มีคุณสมบัติให้ใช้ในการจัดรูปแบบของวันและเวลา ซึ่งจะมีหลากหลายคำสั่งสำหรับเข้าถึงการจัดการรูปแบบวัน/เวลาในการตั้งค่าเริ่มต้นหรือตั้งค่าตำแหน่งและค่าของ formatting styles โดยเราสามารถจัดรูปแบบและการจัดวางวันสำหรับสถานที่ใดๆก็ได้ตามต้องการเพียงใช้คำสั่งต่างๆให้ถูกต้องเท่านั้น และนี่น่าสนใจก็จะเป็นเกี่ยวกับเรื่องการจัดเตรียม Factory method ไว้ให้เรียกใช้ด้วย เช่น

จากคำสั่งด้านล่างก็จะเป็นการเรียกใช้ Factory method สำหรับจัดรูปแบบวันสำหรับสถานที่ปัจจุบัน






คำสั่งถัดมาก็จะเป็นการเรียกใช้ Factory method สำหรับจัดรูปแบบวันและเวลาสำหรับสถานที่ปัจจุบัน







2. Class SecretKeyFactory ซึ่งจะอยู่ใน package "javax.crypto" โดยจะป็น factory สำหรับคีย์ลับหรือรหัสลับนั่นเอง ใน Key Factories นี้จะถูกแปลงจากรหัสจริงหรือกุญแจการเข้ารหัสเป็นรหัสเฉพาะซึ่งเป็นตัวแทนของคีย์จริง โดย Method ต่างๆที่เกี่ยวข้องก็จะมีดังนี้

protected SecretKeyFactory(SecretKeyFactory keyFacSpi, Provider provider,
String algorithm)

คำสั่งข้างต้นจะเป็นการสร้าง SecretKeyFactory Object

สำหรับในการสร้าง SecretKeyFactory Object ของ secret-key จะใช้คำสั่ง
public static final SecretKeyFactory getInstance(String algorithm)
throws NoSuchAlgorithmException

public static final SecretKeyFactory getInstance(String algorithm, String provider)
throws NoSuchAlgorithmException, NoSuchProviderException

public static final SecretKeyFactory getInstance(String algorithm, Provider provider)
throws NoSuchAlgorithmException



Credit : http://cupi2.uniandes.edu.co/javadoc/j2se/1.5.0/docs/api/allclasses-noframe.html


สำหรับเรื่อง Factory Method ทาง Component Rap_Jung Group
ก็ขอจบไว้เพียงเท่านี้ก่อนครับ หากท่านผู้อ่านมีข้อติชมประการใด
ทางผู้เขียนก็รอรับไว้เพื่อการปรับปรุงแก้ไขครับ

ขอบคุณครับ

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

สร้าง Design Pattern ใน NetBean

เราต้องดาวน์โหลด plug in ก่อนนะครับถึงจะใช้ Design Pattern ได้

เริ่มด้วยไปที่ tool -plugins เเล้วก็ดาวน์โหลด ปลักอิน ที่ Available Plugins นามว่า UML เเค่นี้เเหละ






เเล้วจะเรียกไช้ยังไง??
เมื่อเราคอมไพล์เสร็จเเล้วไช้ไหมครับ ต้องคอมไพล์ผ่านด้วยนนะครับ เราก็ไปคลิกขวาที่ packageตรงหน้าต่างproject เเล้วเลือก Reverse Engineer... เราก็จะได้โมเดลมา




เเล้วไงต่อ??
ก็คลิกขวาที่ โมเดล เเล้วเลือก apply design pattern..ก็จะปรากฎหน้าต่าง ไห้เลือกดีไซน์เเพทเทิร์นที่ต้องการครับ










จบเเล้วกับ ดีไซน์เเพทเทิร์นใน เนตบีน

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

ตอนที่ 4 Refactoring code

จากตอนที่แล้วได้ยกเรื่องราวของการเปลี่ยนชื่อ(rename)ทั้งโปรแกรมไปแล้ว ในตอนนี้เรามาดูกันดีกว่าว่ามีฟังก์ชันอะไรน่าสนใจกันอีกที่ช่วยให้เราเขียนโปรแกรมได้สบายขึ้นบ้าง ผมขอแนะนำเป็นบ้างตัวสำคัญๆนะครับ

เริ่มต้นกันเลย

    • Move.  เป็นคำสั่งที่ใช้ในการย้าย method ไปยัง class ต่างๆ โดยใช้ ฟังก์ชัน Refactor => Move...
    • Pull up. คล้ายกับคำสัง Move แต่จะเป็นการย้ายไปยัง superclass แทน โดยใช้ ฟังก์ชัน Refactor => Pull up...
    • pull down. ตรงข้ามกับ pull up เลย คือย้าย method ลงมาจาก superclass เป็น subclass โดยใช้ ฟังก์ชัน Refactor => Pull down...
    • Change method signature. ปรับเปลี่ยน ค่าต่างๆใน method เช่น access modifier,  return type, method name, parameters เป็นต้น โดยใช้ ฟังก์ชัน Refactor => Chage method signature...
    • Extract method.  ใช้แนวคิดคล้ายๆ encapsulates คือเลือก โคดที่เราจะแตกเป็น method ย่อย โดยใช้ ฟังก์ชัน Refactor => Extract method...
Before







After

    • Extract interface คือเป็นการแตก method ที่เราเลือกให้เป็น interface class กลายเป็น class ต้นแบบไป และ class เดิมโปรแกรมจะสร้าง implements ขึ้นมาให้ โดยใช้ ฟังก์ชัน Refactor => Extract interface...  เช่น
Before
After

    • Use Supertype. คือการเรียกใช้ interface class อย่างตัวอย่างข้างบน เราสามารถเรียกใช้ class B ได้โดยใช้ ฟังก์ชัน Refactor => Use Superype...
    • Extract local variable. เป็นการเปลียนจากข้อความให้เป็นตัวแปร โดยโปรแกรมจะสร้างตัวแปรให้มาให้เรา โดยใช้ ฟังก์ชัน Refactor => Extract local variable...  เช่น
Before

After



    • Inline local variable. ตรงกันข้ามกับ Extract local variable คือแทนที่ตัวแปรเป็นข้อความโดยใช้ ฟังก์ชัน Refactor => Inline...
    • Encapsulate. เปลี่ยนจาก public เป็น private  โดยใช้ ฟังก์ชัน Refactor => Encapsulate filed...
Before









After














    • Extract constant. เปลียนค่าหรือข้อความให้เป็นค่าคงที่โดยใช้ ฟังก์ชัน Refactor => Extract constant...
Bofore





After







ผมก็ได้หยิบยกตัวอย่างของ refactoring บ้างตัวมานำเสนอหวังว่าการนำเสนอนี้จะสามารถช่วยให้การเขียนโปรมแกรมของคุณคล่องหรือสบายขึ้นนะครับ