Monday, June 10, 2013

Prototype Pattern

Prototype Pattern
เป็นรูปแบบการเขียนอีกแบบหนึ่งซึ่ง มีประโยชน์ทางด้านการใช้ Object ที่มีจำนวนมาก ๆ โดยที่ว่าเราไม่ต้องไป New Object กันอีกต่อไปเรื่อย ๆ ซึ่งทำให้เปลืองทรัพยากรด้วย เราก็จะต้องมีตัวต้นแบบ และก็ Clone มาเรื่อย ๆ อย่างเช่น Object ของมอนเตอร์ ในเกม เป็นต้นแบบนี้

UML ของ Prototype Pattern

Client - จะสร้าง Object มาแล้วไปถาม Prototype Class ว่าจะคัดลอก
Prototype - กำหนด Interface class สำหรับการสร้าง Object และ Clone
ConcreatePrototype - เป็นรูปร่างหน้าตาของสิ่งที่สร้างขึ้นมาและสามารถ โคลนตัวเองได้

ตัวอย่าง Code
public interface Prototype {
 public abstract Object clone ( );
}

 

public class ConcretePrototype implements Prototype {
 public Object clone() {
  return super.clone();
 }
}

public class Client {

 public static void main( String arg[] ) 
 {
  ConcretePrototype obj1= new ConcretePrototype ();
  ConcretePrototype obj2 = ConcretePrototype)obj1.clone();
 }

}
ลองนำไปใช้ดูนะครับ จะเป็นประโยชน์มากสำหรับคนทำเกม ทำ Visual Effect ต่าง ๆ

Sunday, June 9, 2013

Singleton Pattern

Singleton Pattern
ในบางครั้งนั้นเราจำเป็นจะต้องใช้ Object ตัว ๆ หนึ่งแล้ว แต่เราไม่ต้องการ New Object ขึ้นมาใหม่เรื่อย ๆ ซึ่งทำให้ค่าของการบันทึกที่เคยใช้งานมาแล้ว กลับมาสู่ค่าเริ่มต้น จนกระทั่งจนกว่าโปรแกรมจะปิดไป อย่างเช่น ค่า Config ของตัวโปรแกรม หรือไม่ก็พวก Data ที่เราต้องการใช้ในระดับ Global Object ทางออกของการออกแบบ Object Singleton Pattern ก็เพื่อการนี้

หลักการง่าย ๆ คือ มันจะ New Object ขึ้นมาครั้งเดียวตลอด Life Circle ของโปรแกรมจนกว่าจะ Terminate ไป

รูปปลากรอบ (ราดพริกใส่ซอสอร่อยเหาะ)

จะเห็นได้จาก UML ว่าจะมี intance กำหนดการชี้เข้าหาตัวเอง โดยที่ getInstance จะเป็นการเรียก Object นี้เอาไปใช้

Example Code
class Singleton
{
 private static Singleton instance;
 private Singleton()
 {
  ...
 }

 public static synchronized Singleton getInstance()
 {
  if (instance == null)
   instance = new Singleton();

  return instance;
 }
 ...
 public void doSomething()
 {
  ... 
 }
}


เวลานำไปใช้งาน จะกำหนด Object ให้มีค่าเป็น static ก่อนก็ได้ และใช้ค่า instace ไปเก็บ หรือจะเรียกทั้ง .getInstace() ไปเลยก็ได้

คงได้ประโยชน์ไม่มากก็น้อยนะครับจาก Singleton Class (คลาสคนโสดมีเพียงได้แค่ 1 เดียว)

Friday, June 7, 2013

Model View Controller Programming Pattern Style

Model View Controller หรือเรียกสั้น ๆ ง่าย ๆ ว่า MVC

เป็นวิธีการจัดการระบบการเขียนโปรแกรมของเราที่เป็นระบบมากขึ้น และแพร่หลาย นิยมใช้กันมาก ๆ ตาม Framework ต่าง ๆ เดี๋ยวนี้แทบจะทุก Framework เลยก็ว่าได้นะครับ ทำไมเราต้องศึกษามันงั้นหรือ

ตามว่ากันทฤษฎีล้วน ๆ นั้น สั้น ๆ คือ แม่งง่ายครับ ไล่โค้ดกันง่ายขึ้น มีชีวิตที่ดีขึ้น แยกส่วนการทำงานแบบเห็น และเด่นชัดว่า อะไร ทำงานส่วนไหน

หลักการทำงาน ง่าย ๆ ก็คือ
Model จะมีข้อมูลต่าง ๆ อาศัยอยู่ ไม่ว่าจะเป็น Object ของ นักเรียน นักศึกษา ครู แมว ตัวเงินตัวทอง เป็นต้น
View เองนั้นจะเป็นส่วนที่ แสดงผลข้อมูล จากโมเดล และป้อนข้อมูลส่งให้ Controller
Controller คือส่วนควบคุมทุก ๆ อย่าง (เน้นนะครับว่าทุกอย่าง) ทำให้ View และ Model ทำงานด้วยกัน เป็นผู้ปิดทองหลังพระแท้จริง

Framework ที่แนะนำมาก ๆ นั้นก็คือ Spring สำหรับ Java (ส่วนมากใช้คู่กับพวก JSF และ JSP) และยังมี สำหรับที่ทำเว็บอย่างพวก PHP หรือ ASP เป็นต้น

Entry ต่อไปจะเขียนถึง OOP pattern นะค้าบบบบบบบ

object oriented programming

Object Oriented Programming หรือ OOP
คือแนวคิดของการเขียนโปรแกรมแบบ ง่าย ๆ ที่มีแบบแผน เหมาะกับทุกเพศละทุกวัย(ว่าไปนั่น)
โดยแบ่งแยก การมอง Class ที่เขียนมานั้น เป็นวัตถุ 1 ก้อน ที่มีความสามารถ ต่าง ๆ กัน แต่สิ่งของบางอย่าง ถูกผลิต มาจากสิ่งที่ต้นฉบับเดิม ภาษาที่นิยมใช้กันสุด ๆ (จริง ๆ ใช้กันทุกภาษานั่นแหล่ะ) นั่นก็คือ Java C++ C# ฯลฯ

อย่างเช่น การเรียนการสอน ในหนึ่งชั้นประกอบด้วยอะไรบ้าง
- นักเรียน
- ครู
- ห้องเรียน

สามองค์ประกอบหลักนี้ จะทำให้เกิดการเรียนการสอนขึ้นมาได้ ก็เป็น object การเรียน 1 ห้อง โดยมองว่า   1 ห้องนี้ ประกอบด้วย object ย่อย ที่ชื่อว่า นักเรียน ครู และ ห้องเรียนขึ้นมา

แนวคิดของ Object Oriented นั้น ง่ายใช่ไหมหล่ะ เพราะมันเลียนแบบสิ่งที่เรามองเห็นง่าย ๆ เองนั่นแหล่ะครับ อย่าทำให้มันยาก เดี๋ยวมันจะยาก

Note: ความรู้เพิ่มเติม แบบถ่องแท้ http://www.codeproject.com/Articles/22769/Introduction-to-Object-Oriented-Programming-Concep#OOP

Compiler

compiler (คอมไพล์เลอร์) คืออะไร? ทำไมต้องรู้จักมัน มีคำถามมากมายว่า ทำไม?

คืองี้นะครับ คอมไพล์เลอร์เนี้ย มันคือเครื่องมือแปลภาษาจากคอมพิวเตอร์ ระดับสูง เป็นระดับต่ำ ที่เรียกว่า Machine Code นั้นเอง เพื่อให้คอมพิวเตอร์ ทำตามคำสั่งที่เราเขียน ไม่ว่าจะเป็น C, Java, C++, PHP, Python เป็นต้น


หลักการ ของมันก็มีเพียงแค่ว่าง่าย ๆ มี Code ที่เขียนไว้แล้ว คอมไพล์ และเข้าสู่กระบวนการ ของไฟฟ้า เพียงแค่นั้น ไม่มีอะไรมาก เรื่องการเจาะลึก ผมไม่อยากเจาะลึกมากนัก เพราะมันก็ไม่เหมาะกับพวกเราที่ยังนู๊ป ๆ อยู่ ฮ่า ๆ

Tuesday, August 7, 2012

Flow Chart

จากความเดิม Entry ที่แล้ว ผมได้นำเสนอสิ่งที่ต้องเขียนการวางแผนการทำงานก่อนที่เราเรียกว่า อัลกอริทึ่ม ต่อไปเราจะมาเขียนสิ่งที่เรียกว่า "Flow Chart" หรือเรียกโคตรไทย ๆ เลยว่า "รูปสัญลักษณ์แสดงกระบวนการกระทำ" (ดูแล้วชื่อไทยยาวไปนิดนะ)

ข้อดีของมันก็คือ เราดูง่าย เข้าใจวิธีการทำงานได้อย่างง่าย (ถ้าหากรู้เรื่องรูปสัญลักษณ์) เมื่อมีความผิดพลาด เราเองนั้น ก็จะกลับมาดูว่า ขั้นตอนไหนทำงานผิดพลาดไม่ตรงกับที่เราวางแผนไหม (การทำงานเราต้องวางแผนสิ ไม่วางแผน เจ๊งครับ)

เรามาทำความเข้าใจกับสัญลักษณ์กันก่อนดีกว่า

Terminal - สัญลักษณ์จุดเริ่มต้น และสิ้นสุด


Read - สัญลักษณ์อ่านค่าตั้งค่าต่าง ๆ

Display - แสดงผลออกทางหน้าจอ

Decision - สัญลักษณ์ตัดสินใจ

Process - สัญลักษณ์การทำงาน

Arrow - สัญลักษณ์เส้นทิศทางการไหลของกระบวนการ

Manual Input - สัญลักษณ์การนำเข้าข้อมูลด้วยตัวผู้ใช้

Connector (inner) - สัญลักษณ์แสดงจุดเชื่อมต่อภายใน

Connector (outer) - สัญลักษณ์แสดงจุดเชื่อมต่อภายนอก

                                                                                                                      

จากสัญลักษณ์เบื้องต้นที่กล่าวมานั้น เราก็จะเอามาเขียนกันเป็น Flow Chart ที่แสดงการทำงานจาก Entry ที่แล้วนั่นก็คือวิธีการเดินทางไปโรงเรียนนั่นเอง

1. เดินออกจากบ้าน
2. รอรถเพื่อไปโรงเรียน
2.1 ถ้ามีเงินเยอะ ขึ้นรถมอเตอร์ไซค์รับจ้าง
2.2 ถ้ามีเงินน้อย
2.2.1 ถ้ารถสาย 95 ผ่านมา ถ้าขึ้นรถไปแล้วถึงโรงเรียน ขึ้น
2.3.1 ถ้ารถสาย 26 ผ่านมา ถ้าขึ้นรถไปแล้วไม่ถึงโรงเรียน ไม่ขึ้น
3. รอถึงที่ ถ้าหากถึงที่แล้ว ก็ลงจากรถ
4. เข้าโรงเรียน

เราก็จะเอามาเขียน Flow Chart คร่าว ๆ ได้ดังนี้


จากตัวอย่างเบื้องต้นนี้ เป็นเพียงแค่คร่าว ๆ สำหรับการแก้ปัญหากระบวนการทำงานของชีวิตประจำวันเท่านั้นเอง การเขียนโปรแกรมก็เช่นเดียวกันครับ ต้องคิดกันบ่อย ๆ แล้วจะเข้าใจกันเองว่าอะไรทำก่อนหลัง ลำดับความคิดให้ดีครับ ไม่เช่นนั้น ชีวิตเราก็สับสน แม้แต่การเขียนโปรแกรมนั้นก็เช่นกัน

ขอจบ Entry Flow Chart ไว้ก่อนครับ สวัสดีครับ

Saturday, August 4, 2012

Logic & Algorithm

Logic & Algorithm


หลังจากการทำความรู้จักกับชนิดของตัวแปรกันแล้วจาก Entry ที่แล้ว ตอนนี้เรายังขาดอีกเรื่องที่สำคัญไม่แพ้กันนั่นก็คือ "ระบบความคิด" ถ้าหากเราไม่มีความคิดที่ดี ลำดับการที่ดี โปรแกรมดี ๆ ก็ยังคงไม่มีมาแน่แท้


Logic & Algorithm (ลอจิก & อัลกอริทึ่ม)

Algorithm
มันคืออะไร??? ทำไมต้องรู้ คำตอบก็คือ มันคือกระบวนการทางความคิด และความคิดที่ให้เหตุให้ผล
อย่างเช่น
1 + 1 = 2 เราจะแยกได้ว่า ผลลัพท์ของการบวกนั้นก็คือ 2 และกระบวนการคิดคือ บวก(เพิ่มจำนวน) โดยมี เลข 1 เป็นตัวตั้ง และ 1 อีกตัวเป็นตัวที่เพิ่มขึ้น ผลลัพท์จึงได้ 2 มา
อ่ะ แล้วถ้าเราลองเปลี่ยนมาเป็น 5 + 3 ก็จะ เท่ากับ 8 นั่นเอง

สิ่งที่เป็นกระบวนการคิดนั่นก็คือ วิธีการเพิ่มค่า หรือการบวกนั่นเอง!
อีกตัวอย่างที่อยู่ภายในชีวิตประจำวัน อีกตัวอย่าง เช่น การเดินทางไปโรงเรียน

อย่างแรกที่เราจะต้องคิดกระบวนการหรือกรรมวิธี ที่จะได้ผลลัพท์ มีสิ่งที่เราต้องเข้าใจกันก่อนดังนี้

1. ผลลัพท์ที่ต้องการ
2. สิ่งแวดล้อมที่เรามี
3. สิ่งที่เราต้องการเพื่อแก้ไขปัญหา
4. กระบวนการในการทำ
5. เหตุผลในการตัดสินใจ

พอเรามี 5 สิ่งที่เราเข้าใจกันแล้วเรามาลองจำแนกก่อนที่จะคิดกระบวนการคิดกันดีกว่า

1. ผลลัพท์ที่เราต้องการ [ไปถึงโรงเรียน]
2. สิ่งแวดล้อมที่เรามี [เส้นทาง]
3. สิ่งที่เราต้องการเพื่อแก้ไขปัญหา [รถ,เงิน,การตัดสินใจ,ปัจจัยอื่น ๆ สำหรับเดินทาง]
4. กระบวนการในการทำ [วิธีการเดินทาง เลี้ยวซ้าย ขวา หน้า หลัง ฯลฯ]
5. เหตุผลการตัดสินใจ [เลือกวิธีการ เลือกเส้นทาง]

เราได้ 5 สิ่งครบแล้ว เอาหล่ะ เราจะมาคิดกระบวนการคิดเพื่อที่ว่าเราจะไปโรงเรียนกันอย่างไร

1. เดินออกจากบ้าน
2. รอรถเพื่อไปโรงเรียน
2.1 ถ้ามีเงินเยอะ ขึ้นรถมอเตอร์ไซค์รับจ้าง
2.2 ถ้ามีเงินน้อย
2.2.1 ถ้ารถสาย 95 ผ่านมา ถ้าขึ้นรถไปแล้วถึงโรงเรียน ขึ้น
2.3.1 ถ้ารถสาย 26 ผ่านมา ถ้าขึ้นรถไปแล้วไม่ถึงโรงเรียน ไม่ขึ้น
3. รอถึงที่ ถ้าหากถึงที่แล้ว ก็ลงจากรถ
4. เข้าโรงเรียน

จากขั้นตอนนี้ เป็นอัลกอริทึ่ม และลอจิคในการตัดสินใจที่จะเดินทางแบบ คร่าว ๆ
แรก ๆ เราอาจจะงงครับ แต่ขั้นคิดวิธีการนี้ เป็นสิ่งที่สำคัญมาก ถ้าหากเราไม่สามารถคิดได้ เราก็เขียนโปรแกรมไม่ได้ เพราะว่า การเขียนโปรแกรม คือ การสร้างเครื่องมือเพื่อแก้ไขปัญหาใดปัญหาหนึ่งโดยคอมพิวเตอร์ครับ

Entry ต่อไป จะพูดถึงเรื่องการเขียนแผนผังรูป เพื่อให้มองง่าย ๆ ชัดเจน เพื่อนำไปประกอบกับการเขียนโปรแกรมครับ