สนับสนุนโดย

วันจันทร์ที่ 31 ธันวาคม พ.ศ. 2561

XML คืออะไร

XML คืออะไร ? : เริ่มกันที่ว่า XML ย่อมาจาก Extensible Markup Language เป็นภาษาหนึ่งที่ใช้ในการแสดงผลข้อมูล ถ้าเปรียบเทียบกับภาษา HTML จะแตกต่างกันที่ HTML ถูกออกแบบมาเพื่อการแสดงผลอย่างเดียวเท่านั้น เช่นให้แสดงผลตัวเล็ก ตัวหนา ตัวเอียง เหมือนที่คุณเคยเห็นในเวบเพจทั้วไป แต่ภาษา XML นั้นถูกออกแบบมาเพื่อเก็บข้อมูล โดยทั้งข้อมูลและโครงสร้างของข้อมูลนั้นๆไว้ด้วยกัน ส่วนการแสดงผลก็จะใช้ภาษาเฉพาะซึ่งก็คือ XSL 

วันอาทิตย์ที่ 30 ธันวาคม พ.ศ. 2561

match

การจับอักษรว่าเข้ากับรูปแบบ (pattern) ที่เราต้องการตรวจสอบหรือไม่ สามารถเช็คได้ไม่ยากด้วย Regex นี่แหละครับ เดี๋ยวตัวอย่างนี้จะพาตรวจสอบ href ของ <a> tag ในภาษา HTML

ให้ทำการสร้าง package ชื่อ match และสร้างไฟล์ HrefMatch.java เขียนโค้ดเข้าไปดังนี้

วันเสาร์ที่ 29 ธันวาคม พ.ศ. 2561

การใช้ Regular Expression

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

ลองมาดูโค้ดของ java กันครับ สร้าง package ชื่อว่า regex แล้วสร้างไฟล์ชื่อ RegexTest.java ลงไป

วันศุกร์ที่ 28 ธันวาคม พ.ศ. 2561

การใช้ Memory Map File

ในระบบปฏิบัติการทั่วไป จะทำการดึงไฟล์มาใส่ใน memory ไว้ เพื่อความเร็วเมื่อต้องการประมวลผลเกี่ยวกับไฟล์ สำหรับการเขียนโปรแกรม java เราเองก็สามารถจัดการได้เช่นกัน เราเรียกกันว่า memory map file นั่นก็คือการเอา หน่วยความจำ ไปผูกไว้กับไฟล์ นั่นเอง เพื่อให้ทราบว่าไฟล์ที่ดึงเข้ามานี้ อยู่ตำแหน่งใด ของหน่วยความจำ

ให้สร้าง package ชื่อว่า memoryMap จากนั้นสร้างไฟล์ MemoryMapTest.java เขียนโค้ดลงไปดังนี้

วันพฤหัสบดีที่ 27 ธันวาคม พ.ศ. 2561

Serialization and Cloning

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

ลองมาดูตัวอย่างกันครับ ให้ทำการสร้าง package ชื่อว่า serialClone ขึ้นมาก่อน แล้วสร้างไฟล์ SerialCloneTest.java ใส่เข้าไป พร้อมกับเขียนโค้ดดังนี้

วันพุธที่ 26 ธันวาคม พ.ศ. 2561

ObjectStream และ Zip Programming

เรื่องนี้เราจะมาพูดเรื่องการบีบอัดข้อมูล โดยเขียนโปรแกรมสั่งให้เขียนไฟล์แบบ ไบนารี่ เหมือนเดิม เพียงแต่ว่ามีความต่างคือเป็นการเขียนค่า และบีบอัด (zip) เพื่อให้ข้อมุลในไฟล์มีขนาดเล็กลงไปอีก

ตัวอย่างนี้เพื่อไม่ให้เกิดความสับสน ขอให้สร้าง package ชื่อ objectStreamTest ขึ้นมาก่อน แล้วสร้างไฟล์ ObjectStreamTest.java ใส่เข้าไป พร้อมกับเขียนโค้ดลงไปดังนี้

วันอังคารที่ 25 ธันวาคม พ.ศ. 2561

Reading and Writing Binary Data

การอ่านเขียนไฟล์อีกแบบหนึ่งที่นิยมกันมาก คือข้อมูลแบบ ไบนารี่ ซึ่งข้างในจะเป็นอักษรที่โปรแกรมทั่วไปเปิดอ่านแล้วไม่เข้าใจ เช่น ds2348d7fsdfjskj2341237sdfjjkjwed1234340584568 อะไรพวกนี้
ข้อดีคือมีแต่โปรแกรมเราเขียนเท่านั้นอ่านข้อมูลในนั้นได้ เพื่อปกป้องให้ข้อมูลมีความปลอดภัยมากขึ้นอีกระดับหนึ่ง ซึ่งอาจจะเข้ารหัส หรือไม่เข้ารหัสก็ได้

วันจันทร์ที่ 24 ธันวาคม พ.ศ. 2561

Text File และการใช้งาน

สำหรับการเขียนโปรแกรมเพื่อ เขียน และอ่าน ข้อมูลลงในไฟล์ แบบที่ง่ายที่สุดจะเป็นการจัดการแบบข้อความ หรือที่เราเรียกกันว่า Text File นั่นเองครับ เพราะจะใช้โปรแกรมไหนมาเปิดก็ได้ ไม่ว่าจะเป็น Notepad, Editor ทั่วไป หรือแม้แต่เขียนโปรแกรมมาอ่านข้อมูลเองก็ทำได้ ไม่ว่าจะใช้ภาษาใดๆ

วันอาทิตย์ที่ 23 ธันวาคม พ.ศ. 2561

interrupt

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

วันเสาร์ที่ 22 ธันวาคม พ.ศ. 2561

การใช้ sleep()

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

วันศุกร์ที่ 21 ธันวาคม พ.ศ. 2561

thread rescheduling

สำหรับคลาส Thread มี method ชื่อ yield() สำหรับเรียกเพื่อให้ thread ที่กำลังทำงานอยู่หยุดการทำงานแล้วออกมาที่สถานะ Runnable และจะกลับไปทำงานอีกในภายหลัง โดยจะหยุดทำงานอย่างยินยอมพร้อมใจ หมายถึงว่า thread นั้นเป็นผู้เรียกเอง ไม่ใช่โดน thread อื่นสั่งให้หยุด

วันพฤหัสบดีที่ 20 ธันวาคม พ.ศ. 2561

Thread Priorities

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

มี 3 ระดับคือ
MIN
NORM
MAX

วันพุธที่ 19 ธันวาคม พ.ศ. 2561

SRO : Self Running Object

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

วันอังคารที่ 18 ธันวาคม พ.ศ. 2561

Runnable Interface

ตัวอย่างนี้จะเป็นการใช้งาน Thread แบบไม่ต้องสร้าง Class และ extends จาก Thread โดยตรง แต่ว่าเราจะไปอาศัยการ implement ตัว interface ที่ชื่อว่า Runnable กันครับ ลองดูตัวอย่างโค้ดต่อไปนี้ประกอบเนื้อหา

วันจันทร์ที่ 17 ธันวาคม พ.ศ. 2561

การใช้ Thread ในสถานการณ์จริง

หลังจากที่เราเรียนรู้เรื่อง Thread กันมาสักพักแล้วทีนี้เรามาเขียนโปรแกรมให้ทำงานแบบ Thread กันดูครับ ซึ่งมันจะทำงานหลายๆ อย่างพร้อมกันได้ โดยไม่ต้องรอให้อันนึงเสร็จก่อน ตรงนี้เป็นจุดที่เจ๋งมากๆ สำหรับภาษา java เอาล่ะ มาลุยกันเลย


  1. กฏมีอยู่ว่า คลาสใดต้องการให้ทำงานแบบ Thread จะต้อง extends Thread ก่อน
  2. และสร้าง run method เพื่อเป็นจุดเริ่มต้นในการทำงาน
  3. เรียก object.start() เพื่อให้ทำการสั่งเรียก run method ใน class อีกที


วันอาทิตย์ที่ 16 ธันวาคม พ.ศ. 2561

constructor ของ Thread Class

หลังจากได้รู้จักกับ Thread กันมานิดหน่อยแล้วทีนี้มาดูว่าเราจะทำการ new แล้วเรียก constructor แบบไหนได้บ้าง โดยจะมีหลักๆ ดังนี้

Thread()
Thread(Runnable)
Thread(ThreadGroup, Runnable)
Thread(String)
Thread(ThreadGroup, String)
Thread(Runnable)
Thread(ThreadGroup, Runnable, String)
Thread(ThreadGroup, Runnable, String, long)

วันเสาร์ที่ 15 ธันวาคม พ.ศ. 2561

thread state

สถานะต่างๆ ของ Thread ขณะโปรแกรมกำลังทำงาน ประกอบไปด้วยสถานะดังต่อไปนี้
NEW = เมื่อเทรดถูกสร้าง
RUNNABLE = เมื่อเทรดกำลังอยู่ในคิวงาน
BLOCKED = เมื่อเทรดกำลังรอที่จะ lock วัตถุเข้าสู่ synchronozed block
WAITING = เมื่อเทรดกำลังรอเหตุการณ์บางอย่างที่จะเกิดขึ้นกับ เทรดอีกเส้นหนึ่ง
TIMED_WAITING = เมื่อเทรดรอให้ถึงเวลาที่กำหนด จะเกิดเมื่อโดนเรียก sleep หรือ wait และ join แบบมีกำหนดเวลา
TERMINATED = เมื่อเทรดสิ้นสุดการทำงานแล้ว

วันศุกร์ที่ 14 ธันวาคม พ.ศ. 2561

รู้จักกับ Thread

ในการเขียนโปรแกรมที่ต้องการให้ทำงานหลายๆ อย่างพร้อมกันได้นั้น เราต้องใช้ Thread เพื่อแยกการทำงานออกเหมือนว่าเรามี cpu หลายๆ คอร์ เช่นเราต้องการเขียนโปรแกรมค้นหาข้อมูลจากไฟล์ เพื่อให้ทำงานไวขึ้น ลื่นไหลขึ้น เราก็ต้องแยกเป็นหลายๆ ตัว

java จะมีคลาส Thread ให้ใช้โดยอยู่ใน java.lang.Thread

วันพฤหัสบดีที่ 13 ธันวาคม พ.ศ. 2561

การใช้ Inner Class ซ้อนกัน

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

เช่น

class A{
  class B {
  }
}

วันพุธที่ 12 ธันวาคม พ.ศ. 2561

interface กับการสืบทอดความสามารถ

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

วันอังคารที่ 11 ธันวาคม พ.ศ. 2561

interface อีกเรื่องที่น่ารู้สำหรับสาย java

โดยปกติถ้าหากเราสร้าง class มาแล้วต้องการสืบทอด จะติดปัญหาว่ามันสืบทอดกันได้แค่คลาสเดียว จะสืบทอดจากหลาย คลาสไม่ได้ เพราะโปรแกรมจะงง บางทีโดน method ชื่อชนกัน คอมไพเลอร์จะไม่รู้ว่าต้องไปเลือก override อันไหนกันแน่

ทางแก้เลยต้องใช้ interface เข้าช่วย

วันจันทร์ที่ 10 ธันวาคม พ.ศ. 2561

การใช้ Abstract Class

การกำหนด abstract ก็คือการบอกว่า class ใดที่ทำการสืบทอดไปจะต้องสร้าง method ตามที่โดนกำหนดไว้ใน abstract keyword เช่นว่า เราอยากให้คลาสลูกมี method a(), b(), c() เราก็วางเป็น abstract ไว้ เพื่อกำหนดมาตรฐานตามที่เราต้องการ

วันอาทิตย์ที่ 9 ธันวาคม พ.ศ. 2561

constructor chain

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

A {
A(){}
}

วันเสาร์ที่ 8 ธันวาคม พ.ศ. 2561

super constructor

ในภาษา java มีการให้เราสร้าง super constructor ซึ่งมีข้อจำกัดว่า
- super มีไว้สำหรับให้ constructor เท่านั้นเรียกใช้งาน constructor ของคลาสแม่
- ไม่สามารถเรียกผ่าน method ใดๆ ได้
- ต้องเรียกเป็นประโยคแรกใน constructor
- ห้ามมีประโยคคำสั่งอื่นๆ อยู่ก่อน
- ห้ามเรียก super มากกว่าหนึ่งครั้ง

วันศุกร์ที่ 7 ธันวาคม พ.ศ. 2561

เจาะลึกกับ super ให้มากขึ้น

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

เช่นว่า ถ้าเรามี x อยู่สัก 3 ชั้น มันจะมองหาได้เพียงชั้นแรกเท่านั้น

วันพฤหัสบดีที่ 6 ธันวาคม พ.ศ. 2561

super references

ในกรณีที่เกิดการ shadowing หรือ overriding หากว่าคลาสลูกต้องการไปอ้างอิงสมาชิกของคลาสแม่ ทำได้โดยการใช้คำว่า super ช่วย

แต่พอมี super แล้วก็มักมีคำว่า this ประกบ ซึ่งความหมายที่ต่างกันคือ
super = การอ้างอิงไปหาสมาชิกของ class แม่
this = การอ้างอิงไปหาสมาชิกของตนเอง

วันพุธที่ 5 ธันวาคม พ.ศ. 2561

การ casting สำหรับ object

ตัวอย่างนี้จะมีความยากขึ้นเล็กน้อย เพราะเป็นเรื่องของ oop อีกระดับนึง เวลาที่เราสร้าง object โดยปกติเราก็จะใช้

ClassName objectName = new ClassName();

เช่น

Book b = new Book();

วันอังคารที่ 4 ธันวาคม พ.ศ. 2561

การใช้ import * เพื่อเลือกทั้งหมดใน package

ในกรณีที่เราเขียนคลาสไว้เป็นจำนวนมาก และต้องการดึงเข้ามาโดยใช้ import หากต้องไล่ทีละคลาสคงไม่ไหว เช่น

import myPackage.Customer;
import myPackage.User;
import myPackage.Manager;

วันจันทร์ที่ 3 ธันวาคม พ.ศ. 2561

การใช้งานคำสั่ง import แบบง่ายๆ

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

วันอาทิตย์ที่ 2 ธันวาคม พ.ศ. 2561

การใช้งาน protected หลักการ และการใช้จริง

จากที่เราได้เรียนกันมาบ้างแล้ว ส่วนของ private, defaut, public ทีนี้ก็เหลือตัวสุดท้ายในด้าน modifier นั่นก็คือ protected แปลกันแบบตรงตัวก็ ปกป้อง เอ้ะ ปกป้องยังไง ปกป้องในที่นี้หมายความว่า ไม่ให้ method หรือ properties ใดๆ ถูกเรียกใช้ได้ หากอยู่คนละ package กัน

พูดง่ายๆ ก็คือจำกัดห้อง ถ้าข้ามห้อง ไม่ให้เข้าถึง นั่นเอง

วันเสาร์ที่ 1 ธันวาคม พ.ศ. 2561

รู้จักกับ package

เวลาที่เราเขียนโปรแกรมไปสักพักจะพบว่ามี class จำนวนมากเกิดขึ้น ดังนั้นหากต้องการจัดระเบียบให้เป็นหมวดหมู่ ต้องมีการเก็บเป็นที่เป็นทาง สวนมากก็ใส่ลงใน folder เพื่อแยกห้องเก็บ อันนี้ในทางภาษา java เรียกว่า package หรือตัวห่อหุ้ม เพื่อให้เราสร้าง class ชื่อเดียวกันได้ (แต่ต้องอยู่คนละ package นะ)