Blog

  • หัตถการคืออะไร

    หัตถการ ภาษาอังกฤษ คือ Medical procedure

    หมายถึง การรักษาผู้ป่วยโดยใช้เครื่องมือหรืออุปกรณ์ เข้าสู่ร่างกายผู้ป่วย

     

    หัตถการทางการแพทย์ หมายถึงการรักษาผู้ป่วยโดยมีการใช้เครื่องมือและอุปกรณ์ต่าง ๆ เข้าสู่ร่างกายผู้ป่วย เช่น การใช้เข็มเจาะน้ำจากช่องปอด การใส่สายสวนหัวใจ การฉีดยาเข้าในข้อ การผ่าตัดต่าง ๆ การเย็บบาดแผล เป็นต้น

    หัตถการทางการพยาบาล อาจหมายถึงหัตถการขนาดเล็ก เช่น การเจาะเลือด การทำแผล การให้น้ำเกลือ

  • SAP ISH-MM : MMCO1- RNMCO000

    In sap, when OU staff make the material requistion for patient. The cost will transfer to OU. But actually it should charge to patient

    So this transaction is used for transfer the cost from OU to Patient

    Debit patient

    credit OU

    Reference document

    https://help.sap.com/erp2005_ehp_05/helpdata/en/4d/3ed9d3c467122be10000000a42189b/content.htm?no_cache=true

  • Interface – OOP

    Interface คืออะไร

    เรามาดูนิยามคำศัพท์คำนี้กันดูก่อน จาก Wikipedia

    In object-oriented programming, a protocol or interface is a common means for unrelated objects to communicate with each other. These are definitions of methods and values which the objects agree upon in order to co-operate.

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

    พูดง่ายๆก็คือ การทำงานร่วมกัน โดยกำหนดเป็น Method กลางขึ้นมาซํกอันหนึ่ง

    ขั้นตอนการออกแบบและใช้งาน interface

    สมมติเรามีทีมโปรแกรมเมอร์ นาย ก, นาย ข, นาย ค ทำงานเขียนโปรแกรมด้วยกันอยู่ โดยสามคนกำลังเขียนคลาส นายทหาร นายตำรวจ และคลาสประชาชน แยกกันคนละคลาส

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

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

    เราก็ออกแบบเป็น Interface ชื่อ TellTimeAble โดยมี method TellTime() อยู่ โดยที่ไม่ต้องเขียน code ทำงานอะไรทั้งสิ้น ประกาศไว้เฉยๆ หลังจากนั้น เราก็ไปบอกเพื่อนๆ โปรแกรมเมอร์ในทีม ว่า ให้เอา interface TellTimeAble ของเราไป implement ไว้ใน class ของแต่ละคนด้วย

    เพราะเวลาเราเรียกใช้ เราจะส่งค่าคลาสของแต่ละคนเข้าไปใน Method AllManPleaseTellTime ของเราดังนี้

    Method AllManPleaseTellTime (TellTimeAble man){

    Print(man.TellTime()) // ตรงนี้จะทำลูปวนไป

    }

    ถ้าเพื่อนของเราไม่เอา Interface TellTimeAble ไปประกาศและ implement ไว้ในคลาสของแต่ละคน มันจะส่ง object ที่เป็นคลาสของเขาเข้ามาที่ฟังชั่นเราไม่ได้

    หลังจากนั้น เพื่อนของเราก็ไปปรับปรุงคลาสของแต่ละคน หลังจากที่เพื่อนๆทำเสร็จ ก็สามารถใช้ method tellTime() ของเพื่อนๆ ได้

    เพราะงั้นจะเห็นว่า Method TellTime() ก็คือ method กลางที่ทุกคนจะต้องไปเขียน code การทำงานไว้นั่นเอง

    ส่วนเราก็เรียกใช้อย่างสบายใจ

    นี่ก็คือประโยชน์ของ Interface ครับ

    เมื่อไรจะใช้ Interface

    เมื่อเราต้องการให้ชื่อ method ของเรา  ไปปรากฎใน class ต่างๆ โดยที่เราไม่สนใจว่า ในแต่ละ class จะให้ method ทำงานอย่างไร แต่เราจะเรียกใช้ method จากชื่อที่เราระบุ

    จากตัวอย่าง เราแค่ต้องการจะถามเวลา จาก method TellTime() แต่เราไม่สนใจว่าจะไปดูเวลามาจากไหน หรือนาฬิกายืมใครมา… เพราะคลาสประชาชนมักพูดอะไรไม่ค่อยได้อยู่แล้ว

     

     

    อ้างอิง

    https://en.wikipedia.org/wiki/Protocol_(object-oriented_programming)

    https://docs.oracle.com/javase/tutorial/collections/index.html

  • รู้จักภาษา Swift กันก่อน

    ในปี 2014 บริษัท apple ได้พัฒนาภาษา Swift ขึ้นมาเพื่อใช้พัฒนา application สำหรับ Mac, Iphone, Apple watch, apple tv ซึ่งภาษา swift ถูกออกแบบมาให้เขียนโปรแกรมได้ง่ายขึ้นกว่าแต่ก่อนซึ่งใช้ภาษา Object-C

    สำหรับการเขียนภาษา Swift เราจะใช้ tool ที่ชื่อว่า Xcode ซึ่งสามารถดาว์นโหลดมาใช้ได้ฟรีจาก App store

    แหล่งเรียนรู้ภาษา Swift

    เว็บ computerscienezone.org ได้รวบรวมแหล่งความรู้เกี่ยวกับ swift ไว้มากมาย สามารถคลิกเข้าไปดูตามลิงค์ข้างล่างนี้

    50 Tools And Resources For Swift Programming

  • Overloading vs Overriding

    ในเรื่องการทำ Polymorphism เรามักจะเจอ 2 คำคือ Overriding กับ Overloading ซึ่งบางครั้งสร้างความสับสนให้เราได้เหมือนกันว่า มันต่างกันอย่างไร แถมชื่อยังคล้ายๆกันเสียอีก ยิ่งบางครั้งเอาไปใช้สลับกันมั่วไปหมด

    ความแตกต่างของ Overriding กับ Overloading

    สิ่งที่เหมือนกันก็คือ สองอย่างนี้มันเป็นศัพท์ที่ใช้ตอนเขียน Method นะครับ

    ส่วนสิ่งที่ต่างกันก็คือ

    Method overriding – เป็นเรื่องของ Polymorphism มันต้องมีการสืบทอดเข้ามาเกี่ยวข้อง มีคลาสแม่ มีคลาสลูก การทำก็คือ ทำให้ method ของ class ลูก ทำงานต่างจาก ของ class แม่ ทั้งๆที่ ชื่อ กับพวกค่าที่ส่งเข้า Method เหมือนกันเด๊ะ

    Method overloading –  เป็นเรื่องของการที่ Method ชื่อเดียวกัน แต่มีพวกค่าที่ส่งเข้า Method ต่างกัน จะเป็นเรื่องของ Class Class เดียวครับ บางคนบอกว่ามันไม่เกี่ยวกับเรื่อง Polymorphism แต่บางครั้งก็อาจจะถูกเรียกว่า Static polymorphism นะครับ

     

    สวัสดี

     

    อ้างอิง

    http://www.c-sharpcorner.com/UploadFile/d0a1c8/object-oriented-programming-in-C-Sharp-net/

     

  • Polymorphism – ผ่าเหล่าผ่ากอ

    ทบทวนกันก่อนเรื่อง Inherited ของ OOP โดย inherited มีประโยชน์ในการ reuse code คือมี code ต้นทางชุดเดียว แล้วสืบทอดมาที่คลาสของเรา ทำให้เราสามารถใช้ Data และ Method ของคลาสต้นทางได้

    ทีนี้ถ้าเกิดว่า ถ้าเกิดเราไม่อยากให้ Method ที่สืบทอดมาทำงานเหมือนกับต้นแบบ การ inherited เพียงอย่างเดียวก็ไม่ตอบโจทย์เสียแล้ว

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

    ยกตัวอย่างให้เห็นภาพ สมมติ เราจะสร้างเกมล่าสัตว์ในอุทยานแห่งชาติ

    อันดับแรก สมมติเราออกแบบให้มีคลาสหลักคือ Class GameObject โดย Gameobject  จะมีความสามารถในการเคลื่อนที่ ดังนั้น เราจะออกแบบคลาสนี้ให้มี Method ชื่อ Move

    ต่อมาเราจะสร้าง Class ตัวละครในเกม 3 คลาส ได้แก่ เสือดำ(Panther), นายพราน(Hunter), ลูกปืน(Bullet) โดยทั้งสามคลาส สืบทอดมาจาก Class GameObject

    ทั้งสามคลาสก็จะมี Method Move ที่สามารถใช้งานได้

    ตัวอย่างการเรียกใช้

    Panther.move()

    Hunter.move()

    Bullet.move()

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

    ดังนั้นแต่ละตัวละคร มันมีการเคลื่อนที่ทำงานไม่เหมือนกัน การ inherited มาเพียงอย่างเดียว เลยยังไม่ตอบโจทย์ เพราะถ้าไม่ทำอะไรเพิ่ม การเคลื่อนที่ของทั้งสามก็จะเหมือนกัน คือใช้วิธีการเคลื่อนที่ตาม class ต้นทาง คือ GameObject.move()

    ถ้าจะตอบโจทย์เราก็ต้องเอาความสามารถ Polymorphism เข้ามาช่วย

    โดย Polymorphism พูดง่ายๆก็คือเราสามารถที่จะทำให้ Method ชื่อ Move ของแต่ละตัวละคร ทำงานต่างกันได้ โดยเขียน code ในแต่ละ class ตัวละคร ให้มันต่างกัน เราเรียกการทำแบบนี้ว่า Method overriding

    ยกตัวอย่างเช่น

    ในคลาส GameObject เราเขียน code ไว้ใน Method move ว่า เคลื่อนที่ได้ 10 km/hr

    ทีนี้ในแต่ละคลาสตัวละคร ที่สืบทอดมา เราไม่ได้ต้องการให้เคลื่อนที่ได้ 10 km/hr ทุกตัว ดังนั้นเราต้องทำ Method overriding คือไม่ใช้ code จาก method move ของต้นแบบ แต่จะเขียนเอาเอง

    ถ้าเป็นคลาสเสือดำ เราก็อาจจะเขียน Code ใน method move ของคลาสเสือดำ ว่า วิ่งได้ 50 km/hr แต่ถ้าเป็นนายพราน เราก็อาจจะเขียน code ใน method move ของคลาสนายพรานว่า ไม่ต้องเดิน นั่งเฉยๆ ก็ได้กินซุปเสือดำแล้ว

     

     

  • Inheritance – การสืบต่อเผ่าพันธ์

    มนุษย์โปรแกรมเมอร์อย่างเรา มักจะขี้เกียจทำอะไรซ้ำๆ ถ้าต้องเขียนโค้ดเดิมๆ ซัก 2 – 3 รอบก็เบื่อละ แต่พอมีแนวคิดการเขียนโปรแกรมแบบ OOP มันก็ช่วยทำให้ชีวิตเราง่ายขึ้น

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

    เพราะฉะนั้น การสืบทอดใน OOP พูดง่ายๆก็คือ การ reuse code โดยที่มี code ตั้งต้นชุดเดียว แล้วเอามาใช้ได้เรื่อยๆ นั่นเอง เช่น สมมติมี Class  A เชียนไว้โดยโปรแกรมเมอร์ชื่อนาย ก ทีนี้ เราเห็นว่า Class A ทำงานได้ดีชมัด เราอยากเอา Class A มาใช้ แทนที่เราจะ copy code มาวางในโปรแกรมเรา เราก็ทำงานสืบทอด Class A มาซะเลย ทีนี้ Class ของเราก็จะมีความสามารถจาก Class A  แถมเรายัง Modify ให้เก่งขึ้นได้อีกด้วย

     

     

  • Encapsulation – การห่อหุ้มข้อมูล

    โดยปกติการเขียนโปรแกรมแบบ OOP ที่มองทุกอย่างเป็นวัตถุนั้น ภายในแต่ละวัตถุจะมี 2 ส่วน คือ Data กับ Method

    ส่วนของข้อมูล(Data) บางครั้งมักจะถูกห่อหุ้มไว้ให้ใช้ได้ภายในวัตถุนั้นๆ เท่านั้น

    ถ้าอยากจะเปลียนแปลงข้อมูล ก็ควรจะเรียกใช้ผ่าน Method

    การป้องกันไม่ให้มาแก้ Data โดยตรงก็คือ การ encapsulation นั่นเอง คือหุ้ม Data ไว้ ให้เรียกใช้ผ่าน Method (รายละเอียดปลีกย่อยยังมีอีกเยอะ ผมจะเล่าแค่ conceptให้เข้าใจนะครับ ส่วนอื่นไปศึกษาต่อได้ไม่ยาก)

    ยกตัวอย่าง

    เราออกแบบและเขียนโปรแกรม วัตถุบัญชีธนาคาร

    ในบัญชีธนาคารก็จะมี Data ก็คือ ยอดเงิน  กับ Method คือฝากถอน โดย Method ฝากถอน จะทำงานโดยบันทึกข้อมูลรายการเดินบัญชีลงใน statement + ปรับข้อมูลยอดเงิน

    สมมติว่าเราทำงานกันเป็นทีมโปรแกรมเมอร์ เราก็ควรออกแบบวัตถุบัญชีธนาคารนี้ว่า

    ห้ามมาปรับยอดเงินโดยไม่ผ่าน Method นะ ไม่งั้นมันจะไม่มีการบันทึก transaction ฝากถอนไง อยู่ดีๆ ยอดเงินก็เพิ่มขึ้นหรือลดลง โดยพอไปดู statement กลับไม่เจอรายการ

    พอโปรแกรมเมอร์คนอื่นมาใช้วัตถุบัญชีธนาคารก็ต้องทำตามกฎที่เราออกแบบไว้

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

    อย่างนี้เป็นต้น

    ทีนี้ประโยชน์อีกอย่างหนึ่งสำหรับโปรแกรมเมอร์คนอื่นๆก็คือ

    เค้าก็ไม่จำเป็นต้องรู้ว่าไอ้เจ้า Method ฝากถอน มันทำงานยังไง

    จะต้องไปปรับยอด ไปลงบัญชี บลาๆๆๆ อย่างไร

    เพราะเค้าเชื่อใจว่าเราออกแบบและเขียน Method ให้เค้ามาดีแล้ว

    เค้าก็เรียกใช้ Method ที่เราออกแบบไว้ ก็จบเลย อย่างอื่นไม่ต้องไปแคร์

    ถ้ามันผิด ก็งานเข้าเราที่ต้องแก้บั๊กเท่านั้นเอง

  • Type in C# – ว่าด้วยเรื่องชนิดของข้อมูล

    ชนิดของข้อมูลในภาษา C# แบ่งออกเป็น 3 ประเภทใหญ่ๆ คือ

    1. Value Type
    2. Reference Type
    3. Pointer Type

     

    1. Value Type ชนิดข้อมูลแบบเก็บค่าจริงๆ เช่นพวก Integer, Bool, Decimal, Floating point

    Value Type ยังแบ่งออกเป็น 2 กลุ่มใหญ่ๆ อีกคือ

    1.1 struct

    โดยใน Struct ยังแบ่งออกเป็น 3 กลุ่มย่อยเข้าไปอีกคือ

    1.1.1 Numeric Type พวกตัวเลข แบ่งออกเป็น 3 อีก คือ

    1.1.1.1 Integral (จำนวนเต็ม)ได้แก่ sbyte, byte, char, short, ushort, int, uint, long, ulong

    1.1.1.2 Floating Point (จำนวนทศนิยม) ได้แก่ float กับ double

    1.1.1.3 Decimal (จำนวนจุดทศนิยมแบบแม่นยำมากๆ ใช้กับพวกการเงิน)

    1.1.2 Bool Type ข้อมูลแบบถูกผิด True/False

    1.1.3 User Define structs กำหนดเอง

    1.2 Enumerations ข้อมูลแบบนับ แบบแจกแจง เช่น ชุดข้อมูลของวัน จันทร์ อังคาร พุธ ….

    เวลาประกาศก็จะทำได้ว่า enum myDay = {Mon, Tue, Wed,Thu, Fri, Sat, Sun}

     

    2. Reference Type  ข้อมูลประเภทอ้างอิง คือ ตัวมันไม่ได้เก็บค่า แต่ตัวมันจะเก็บการอ้างอิงไปหาค่าอีกทีนึง

    Reference type จะมี Keyword ที่ใช้ประกาศประกอบด้วย

    2.1 Class

    2.2 Interface

    2.3 Delegate

    และมีแบบ built-in ไว้แล้วใช้ได้เลย ได้แก่

    2.4 String

    2.5 dynamic

    2.6 object

    3. Pointer Type ข้อมูลประเภทชี้เป้า จะคล้ายๆข้อมูลแบบอ้างอิง แต่จะเป็นแบบ Type Unsafe คือ type ที่ชี้ไปหาอาจจะไม่ตรงกับที่ต้องการใช้

    แล้วมันอาจจะทำให้เกิด runtime error ขึ้นมาได้

    สังเกตุชนิดข้อมูลแบบ Pointer ได้จากเวลาประกาศจะมีเครื่องหมาย ดาว ติดอยู่หลังชนิดข้อมูล

    int* p1, p2;

  • Style sheet, CSS, Less, Saas

    style sheet หรือชื่อเต็มๆ คือ cascade style sheet หรือย่อว่า css

    เป็นไฟล์ที่เป็นส่วนประกอบของเว็บไซต์ เพื่อใช้ในการวาง Layout ของเว็บ

    สมัยก่อนก็รู้จักแต่ CSS

    แต่เดี๋ยวนี้เจอ 2 คำเพิ่มขึ้นมา คือ

    1. Sass (ไม่ใช่ software as a service – SaaS นะ ห้ามสับสน)
    2. Less

    ความเป็นมา

    Saas

    Saas ถูกออกแบบโดย Hampton Catlin และพัฒนาโดย Natalie Weizenbaum ตั้งแต่ปี 2006

    แต่พึ่งจะมี Stable release ออกมาเมื่อปี 2017 นี่เอง

    Saas เป็น script language ที่จะถูกแปลถูก compile ไปเป็น CSS อีกที

    Saas ทำให้การเขียน css ง่ายขึ้น เราสามารถประกาศตัวแปร จัดกลุ่ม code ต่างๆได้

    แล้วค่อย compile เป็น css อีกที

    Less

    เกิดทีหลัง Saas โดยได้แรงบันดาลใจมาจาก Saas เพียงแต่ว่าออกแบบมาให้การเขียนโค้ดใกล้เคียงกับ CSS มากที่สุด

    Less สามารถที่จะ real time compile ได้ อธิบายง่ายๆ คือปกติ เวลาใช้ Saas หรือ less เราจะเขียนได้ไฟล์นามสกุล .saas หรือ .less

    แล้วเอาไปผ่าน compiler จะได้เป็นไฟล์ .css แล้วค่อย upload ไปไว้ในเว็บของเราอีกที

    แต่ less มีความสามารถมากกว่านั้นหน่อยก็คือ สามารถเอาไฟล์ less.js ไปไว้ในเว็บของเรา แล้วเรียกใช้ ซึ่งทำให้ เราไม่ต้องไปทำให้เป็นไฟล์

    .css ก่อนนั่นเอง