Most popular

วันจันทร์ที่ 22 สิงหาคม พ.ศ. 2554

Object กับ Instance ต่างกันอย่างไร

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

Object นั้นก็คือวัตถุชิ้นหนึ่งๆ ที่เราจับต้องได้ในชีวิตประจำวัน แต่ถ้าในทาง Programming แล้ว มันก็คือวัตถุเสมือน ที่สร้างขึ้นมาจาก Class ซึ่งมีคุณสมบัติและความสามารถ จะมากหรือจะน้อยก็ขึ้นอยู่กับ Class ที่สร้างมันขึ้นมา
การเรียกใช้ Object โดยตรงอย่างใน C# หรือ Java ก็เป็นอีกสิ่งหนึ่งที่เห็นได้อย่างชัดเจน

คำสั่ง new เป็นการสร้าง Object ขึ้นมาใช้งานในหน่วยความจำ
ส่วน Instance นั้นเปรียบเสมือนตัวแทนของ Object แต่เราก็สามารถนำ Instance ไปใช้เพื่อเป็นตัวแทนอ้างอิงถึง Class ได้เช่นเดียวกัน ฉนั้นเมื่อประกาศ Instance ก็คือ Type หนึ่งนั่นเอง

frm1 ก็คือ Instance ที่สร้างขึ้นมาใช้แทน Object 
ใน Delphi ตัวแปรที่ทำหน้าที่เป็น Instance ของฟอร์ม ถูกประกาศขึ้นอัตโนมัติเมื่อสร้างฟอร์ม
เพื่อใช้แทน Class และทรัพยากรภายใน Class โดยที่ไม่ต้องสร้างเป็น Object
สรุปคือ
Object ก็คือต้นแบบ ส่วน Instance นั้นก็เป็นเหมือนตัวแทนที่นำมาเรียกใช้ เช่น
ถ้า Object เป็น Windows 5.1 Instance ก็คือ Windows XP
ถ้า Object เป็น Windows 6.0 Instance ก็คือ Windows Vista
ถ้า Object เป็น Windows 6.1 Instance ก็คือ Windows 7

วันจันทร์ที่ 8 สิงหาคม พ.ศ. 2554

สร้าง QR Code ด้วย ASP.NET

ส่วนที่จำเป็นคือไฟล์ .dll ที่เป็นตัว Generate QR Code อยู่ในโปรแกรม Messaging Toolkit barcode
ดาวน์โหลดได้ที่  http://twit88.com/platform/attachments/download/158/setup-qrcode.exe 
เมื่อดาวน์โหลดมา ติดตั้งให้เรียบร้อยแล้วเข้าไปตรวจสอบที่ Path 
C:\Program Files\MessagingToolkit\MessagingToolkit-QRCode\QRCode\
หาไฟล์ MessagingToolkit.QRCode.dll และให้คัดลอกไปไว้ที่ Directory bin ของ Project
จากนั้น Add Referencไฟล์ MessagingToolkit.QRCode.dll ที่อยู่ใน  Directory bin  เข้ามาใน Project

Add Reference
ตอนนี้เรามีไฟล์ .dll ที่จะทำการ Generate QR Code ได้แล้ว ขั้นตอนต่อไปคือการใช้ Generic Handler สร้างรูปภาพ QR Code ขึ้นมา

เพิ่มไฟล์ Generic Handler .ashx เข้ามาใน Project ในที่นี้ผู้เขียนตั้งชื่อเป็น QRcode.ashx
ในไฟล์ QRcode.ashx มีคำสั่งการทำงานดังนี้


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;


namespace aspNetQRCODE
{
    public class QRcode : IHttpHandler
    {


        public void ProcessRequest(HttpContext context)
        {
            string myText= context.Request.QueryString.Get("code");
            context.Response.ContentType = "image/gif";
            if (myText.Length > 0)
            {
                MessagingToolkit.QRCode.Codec.QRCodeEncoder qe = new MessagingToolkit.QRCode.Codec.QRCodeEncoder();
                System.Drawing.Bitmap bm = qe.Encode(myText);
                bm.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
            }   
        }


        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

ในหน้าเพจที่ต้องการให้แสดงเป็นรูปภาพ ให้ใส่ Tag img เรียกไปที่ไฟล์ QRcode.ashx พร้อมส่งข้อความที่ต้องการจะสร้าง QR Code

<img src="QRcode.ashx?code=i love you" alt="the code" />

ลองทดสอบเปิดหน้าเพจขึ้นมา

Tag img จะทำการเรียกใช้งานผ่าน QRcode.ashx ที่เป็น Generic handler คืนค่ากลับมาเป็นภาพ .gif
ทดสอบอ่าน QR Code ด้วยการบันทึกไฟล์รูปภาพ QR Code จากหน้าเพจ
และเปิดโปรแกรม Messaging Toolkit ที่เราได้ติดตั้งไปในตอนแรก
(โดยปกติจะอยู่ที่ C:\Program Files\MessagingToolkit\MessagingToolkit-QRCode\MessagingToolkit.Barcode.Demo.exe)

เมื่อเปิดไฟล์ภาพและกด Decode จะได้ผลเป็นข้อความตามที่เราได้สร้างขึ้น





ที่มา : http://www.jphellemons.nl/post/Generate-QR-Codes-with-AspNet-C.aspx

ดาวน์โหลด
เครื่องมือสำหรับใช้งาน QR Code http://www.4shared.com/file/wNgx_Pnv/setup-qrcode.html
ตัวอย่างในเนื้อหา http://www.4shared.com/file/vkhFdPpg/aspNetQRCODE.html

QR Code คืออะไร

ผมว่าทุกท่านคงรู้จักกับ Bar Code กันแล้ว เพราะทุกสินค้า และห้างร้านบ้านเรา ก็มักจะใช้ตัว Bar Code เพื่อกำกับสินค้า ว่าสินค้าตัวนั้น มีชื่อว่าอะไร ราคาเท่าไหร่ เป็นต้น เพื่อให้คอมพิวเตอร์ได้อ่าน และประมวลได้อย่างรวดเร็ว แต่คุณ Bar Code ครับ คุณยังดีไม่พอสำหรับเกมอัจฉริยะข้ามคืน !! เอ่อ ไม่ใช่สิ คือมีมนุษย์เรา พยายามคิดสิ่งที่จะสามารถอ่านค่า ได้เร็วกว่า Bar Code ขึ้นมาอีก สิ่งนั้นคือ QR Code ครับ
ลักษณะของ QR Code
โดย QR Code ก็คือรหัสชนิดหนึ่ง หรือที่เรียกกันว่า two-dimensional bar code หรือใครจะเรียกว่า 2D bar code ก็แล้วแต่ โดยหลายชื่อนี้ ก็คือ QR Code เหมือนกันครับ ซึ่ง QR Code นี้ถูกคิดค้นขึ้นในปี 1994 โดยบริษัทสัญชาติญี่ปุ่น ที่ชื่อ Denso-Wave และได้จดทะเบียนลิขสิทธิ์ชื่อ QR Code ไปแล้วทั้งในญี่ปุ่น และทั่วโลก ทำให้เรามักจะเรียกว่า 2D Bar Code กันแทนเพื่อเลี่ยงปัญหาลิขสิทธิ์ แต่อย่างไรก็ตาม คำว่า QR Code นั้น ได้ถูกนิยามความหมายว่าเป็น Quick Response หรือการตอบสนองที่รวดเร็ว ซึ่งมาจากความตั้งใจของผู้คิดค้น ที่จะให้ QR Code นี้สามารถถูกอ่านได้อย่างรวดเร็วนั่นเอง ซึ่งตัวสัญลักษณ์ QR Code นี้ได้รับความนิยม จนกลายเป็นของธรรมดาในญี่ปุ่นไปแล้ว

ทุกวันนี้ QR Code นอกจากจะเอาไว้ใช้ในวงการค้าขายสินค้า หรือขนส่งแล้ว ยังเป็นที่นิยมนำเอามาใช้ในการตลาดด้วย เราจะเป็น QR Code ไปโผล่อยู่ตามโฆษณา ในแมกกาซีน หรือป้ายโฆษณา Bill Board เป็นต้น ซึ่งเราสามารถให้ QR Code นี้ เก็บข้อมูล url ของเราได้ และด้วยเทคโนโลยีที่ทันสมัย เราสามารถติดตั้งซอฟต์แวร์สำหรับอ่าน QR Code หรือ 2D Bar Code นี้ไว้ในโทรศัพท์มือถือได้ง่าย ๆ แล้ว เมื่อพบ QR Code ในแมกกาซีน หรือป้ายโฆษณา Bill Board ก็สามารถเอามือถือไป scan เพื่อรับข้อมูลนั้นมาได้ โดยสะดวกง่ายดายครับ สำหรับ QR Code ตัวอย่างที่เห็นอยู่นี้ มีความหมายว่าเป็น http://keng.com หรือเป็น url ของเว็บไซต์ของผมนั่นเองครับ ซึ่งตัว QR Code นี้สามารถเก็บข้อมูลได้หลายรูปแบบ ตั้งแต่ wap url , web url หรือไฟล์ข้อมูลต่าง ๆ เป็นต้น





ที่มา : http://keng.com/2008/09/06/what-is-qr-code/

วันจันทร์ที่ 1 สิงหาคม พ.ศ. 2554

C# ทำยังไง อยากใช้ Constructor ของแม่

เมื่อเขียนโปรแกรมเชิงวัตถุ (OOP) แน่นอนว่าจะต้องเจอการทำ Inheritance หรือการสืบทอด และบางทีก็สืบทอดกันจนเป็นนิสัย โดยเฉพาะ Project ใหญ่ๆ ที่มักจะมีการสร้าง Pattern ให้ทีมงานใช้ บางครั้งก็จะเป็น Form Pattern ทั้งหมดเลย คราวนี้ก็อยู่ที่ตัวผู้ Inherit ไปที่ต้องไปต่อยอด ไป Implement ให้ตรงตามเป้าหมายของงาน
การ Inherit หรือการสืบทอดไป ความสามารถ รูปลักษณ์เกือบทั้งหมดก็จะได้มรดกไปจากแม่ (base class) ทั้งสิ้น แต่มีบางสิ่งที่สำคัญที่ไม่ได้เป็นของแม่ นั่นก็คือ "หัวใจ" 
หัวใจของคลาสที่จะขาดเสียไม่ได้นั่นก็คือ Constructor ทุกคลาสจะต้องมี Constructor ขึ้นอยู่ว่าจะใช้ Constructor ที่ Compiler สร้างให้ หรือจะสร้างเอง
จะทำ Override ก็ไม่ได้ การใช้ Constructor ของคลาสแม่นั้นไม่ยาก แต่จะไม่ได้ใช้โดยตรง คลาสลูกยังมี Constructor ของตัวเองอยู่ แต่ให้ Reference ไปที่คลาสแม่ของตัวเองก่อนที่จะทำงาน

ในตัวอย่าง ผู้เขียนจะสร้างฟอร์ม 2 ฟอร์ม
  1. Form1 เป็นฟอร์มหลัก
  2. frmChild เป็นฟอร์มต้นแบบ ใช้เป็น Pattern เท่านั้น
ไฟล์ใน project
หน้าตาของ frmChild
หน้าตาของ Form1
ผู้เขียนจะทำการ Overload Constructor ใน frmChild เพื่อที่จะให้ใส่ Parameter เข้ามา Set title bar ได้ในตอนสร้าง

*ในการ Overload Constructor  ของฟอร์มนั้นจะแตกต่างกันใน .Net 3.5 และ .Net 4.0
เพราะว่า .Net 4.0 นั้นสามารถตัด Constructor ที่เป็น Default ออกได้เลย
ต่างจาก .Net 3.5 ที่ต้องยังคงตัวเดิมไว้ มิฉนั้นจะ error
จากนั้น Add Form เข้ามาใน Project โดยเลือก Inherited Form
จะพบหน้าต่างให้เลือกว่าจะ Inherit จากฟอร์มไหน ในที่นี้ผู้เขียนเลือก Inherit จาก frmChild
ทำการแก้ไข Constructor ของฟอร์มที่ Inherit มา(ในที่นี้คือ Form2)
แก้ไขให้ Constructor ของ Form2 สามารถรับ parameter ได้ คือ title
และเมื่อรับค่าจาก parameter มาแล้ว ก็ให้ส่งค่า parameter ไปทำงานกับ Constructor ของคลาสแม่
ในปุ่ม Show ของ Form1 เป็นคำสั่งให้สร้าง และแสดงฟอร์ม

   new Form2("สืบทอด 1").Show();
   new Form2("สืบทอด 2").Show();

เมื่อรันทดสอบ หลังจากกดปุ่ม Show จะมีการสร้าง Form2 มา 2 ฟอร์ม โดยมีการเปลี่ยนข้อความบนTitle bar
ตามคำสั่งของ Constructor ที่ Overload อยู่ใน frmChild

C# Generic Method เพิ่มความยืดหยุ่น แทนการทำ Overload

การเขียน Code แบบใหม่ๆที่นำเสนอในการเขียน C# หรือ Java นั้น จะเน้นไปที่ความยืดหยุ่นเพื่อให้รองรับงานใหญ่ๆระดับ Enterprise ซึ่งอาจจะมีการพัฒนาที่ยาวนาน และมีการเขียน Base class ไว้เพื่อใช้งานมากมาย มี method ในการทำงานจำนวนมาก ในระดับ method ยังไม่นับรวมพวกที่ทำการ Overload เพื่อให้รองรับการพัฒนาในแบบต่อยอด ซึ่งจะทำให้มีจำนวน method มหาศาล

การสร้าง Generic Method เป็นอีกทางเลื่อกนึงที่ถูกนำเสนอออกมา เพราะเป็นการทำให้ method ยืดหยุ่นมากกว่าที่เคยเป็นมา และไม่ต้องทำการ Overload เพิ่มมากมาย ในเวลาที่ต้องการเปลี่ยนชนิดของค่า เหมือนในภาษาสมัยก่อน จึงมีความยืดหยุ่นและลดความซ้ำซ้อนได้มาก

Generic method สร้างขึ้นไม่ยาก ผู้เขียนจะสร้าง method ง่ายๆเพื่อดูการทำงาน
ผู้เขียนสร้าง Generic method ง่ายๆเพื่อให้แสดงค่าเป็นข้อความออกมา แต่ให้สังเกตุที่ค่า Parameter ที่ส่งเข้ามาใน method

        //สร้าง Generic method ที่มีการ return ค่าเป็น string
        //การระบุ Type ของ Parameter จะขึ้นอยู่กับการกำหนดค่า T และ X
        private string showMess<T,X>(T age,X display)
        {
            string res = null;

            //เก็บค่า Type ของ X
            Type X_is = typeof(X);
            //ตรวจสอบ Type ของ X ว่าเป็น string หรือไม่
            if (X_is == typeof(string))
                //ถ้าเป็น string ให้คืนค่าเป็นข้อความ
                res= Convert.ToString(display+age.ToString());
            else 
                //หากเเป็น Type อื่นๆ ให้แปลงเป็น int แล้วนำมาบวกกัน
                res= Convert.ToString(Convert.ToInt32(display)+Convert.ToInt32(age));

            return res;
        }

การทดสอบนั้น ผู้เขียนได้ใช้ Generic method "showMess" ให้แสดง MessageBox ขึ้นมาเพื่อดูผลของค่าที่ return ออกมา

        public Form1()
        {
            InitializeComponent();
            MessageBox.Show(showMess<int, string>(22,"ข้าพเจ้ามีอายุ : "));
            MessageBox.Show(showMess<double, string>(.357, "คุณพ่อมีปืนขนาด : "));
            MessageBox.Show(showMess<int, int>(2011, 543));
            MessageBox.Show(showMess<int, double>(2011, 1.00));
        }

ผลการทำงาน