JAVA
กลับไปในปี 1990 บริษัทซันต้องการพัฒนาสินค้าอุปโภคอิเล็กทรอนิกส์
จึงตั้งกลุ่มการทำงานขึ้นมาในนามของ Green Group โดยต้องการสร้างสภาวะแวดล้อมการทำงานโดยไม่ขึ้นกับ
platform ใดๆ และหวังว่าการพัฒนาจะสามารถใช้ได้กับอุปกรณ์อิเล็กทรอนิกส์ทุกชนิด
ผู้ใช้สินค้าอิเล็กทรอนิกส์เหล่านั้นไม่ต้องการรู้ว่าข้างในอุปกรณ์เหล่านั้นใช้หน่วยประมวลผลอะไร
เพียงต้องการอุปกรณ์ที่ใช้ได้ดีก็พอ Jame Gosling ได้รับมอบหมายในการพัฒนาครั้งนี้
Gosling เลือกภาษา C++ ในการพัฒนาระบบ แต่พบว่าการใช้ภาษา C++ นั้นมีระยะทางอันยาวไกลที่จะประสบความสำเร็จ
(ในระหว่างพัฒนาพบข้อบกพร่อง [bug] มากมาย โดยเฉพาะการจัดการกับหน่วยความจำ) Gosling
จึงเปลี่ยนใจพัฒนาภาษาขึ้นมาสำหรับโครงการนี้ ขณะที่เขาพัฒนาอยู่นั้น เขาสังเกต
tree ภายนอก Windows ที่เขาจะเข้าไปสู่ไดเรคทอรีของภาษาใหม่ที่พัฒนาขึ้น เขาจึงเรียกภาษานี้ว่า
OAK (ภายหลังไม่ประสบความสำเร็จในการจดเครื่องหมายการค้า จึงเปลี่ยนมาเป็นชื่อ
JAVA ซึ่งนำมาจากเครื่องดื่มกาแฟที่ทีมพัฒนานิยมดื่ม)
เทคโนโลยีที่ใช้ OAK ได้ปรากฏเป็นรูปร่างขึ้นในส่วนประกอบ
4 ส่วน คือ OAK, ระบบปฏิบัติการ Green OS, ระบบติดต่อผู้ใช้ (UI) และฮาร์ดแวร์
รวมกันเป็นอุปกรณ์คล้ายพีดีเอ (PDA) ในนาม *7 (star seven) ทีม Green Group หวังว่า
*7 นี้จะปรากฏอยู่บนกล่องอุปกรณ์อิเล็กทรอนิกส์ต่างๆ คล้ายกับของ Dolby Lab ผู้บริหารของซันประทับใจ
*7 มาก แต่ก็ไม่แน่ใจว่าอะไรคือขั้นตอนต่อไป
ในตอนต้นปี 1993 Time-Warner ต้องการหาบริษัทมาพัฒนาระบบปฏิบัติการสำหรับ
Set-Top Box และ Video-On-Demand ทีม Green Group จึงตั้งบริษัท First Person เพื่อทำข้อเสนอกับทาง
Time-Warner ขณะเดียวกันทางอินเตอร์เน็ตก็ได้ Graphical Web Browser ตัวแรก (Mosaic
1.0) มาใช้งานสำหรับ Web Page ในเดือนมิถุนายน 1993 Time-Warner ได้เลือกบริษัทซิลิคอนกราฟฟิค
ในการพัฒนา Set-Top Box และ Video-On-Demand ต้นปี 1994 บริษัท First Person เกือบจะตกลงได้กับ
3DO แต่ก็ไม่สำเร็จ ภายหลังที่ไม่มีผู้พัฒนาร่วม (partners) แนวทางการตลาดก็ไม่แน่นอน
First Person จึงล้มเลิกไปก่อนที่จะประกาศกับสาธารณชนว่า ครึ่งหนึ่งของทีมงานจากซันไปทำงานที่
Digital Video Server Bill Joy ผู้ที่ได้ยินเกี่ยวกับภาษา OAK จึงคิดว่าภาษานี้น่าจะเป็นภาษาสำหรับอินเตอร์เน็ต
(Internet Programming) และต้องมีทุกหนทุกแห่ง ทีมที่เหลือจึงกลับมาใช้เทคโนโลยีของ
First Person สำหรับ CD-ROM, Online Multimedia และ Network-Base Computing ขณะที่
First Person พ่ายแพ้กับการแข่งขันของ Interactive TV World Wide Web ก็ชนะในวงการ
Internet ในเดือนกันยายน 1994 ภายหลังปรับภาษา Java (OAK) กับ World Wide Web,
Naughton และ Jonathan Payne ได้ประสบความสำเร็จในการพัฒนา Browser สำหรับ Java
และ World Wide Web ในนาม WebRunner (ภายหลังเปลี่ยนเป็น HotJava เนื่องจากติดเรื่องเครื่องหมายการค้าอีกเช่นเคย)
Java ได้ถูกแนะนำกับสาธารณชนในงาน Sun World (23 พฤษภาคม 1995) และได้รับความนิยมอย่างแพร่หลาย
เพราะพิสูจน์แล้วว่าไม่ใช่ภาษาสำหรับเด็กเล่น (Toy Language)
จากประวัติของ Java ทำให้เราทราบว่า
Java มีจุดมุ่งหมายที่จะเป็นภาษาสำหรับทุก platform และเป็นภาษาสำหรับเน็ตเวิร์ค
เนื่องจากเป็นภาษาที่พัฒนามาจาก C++ จึงคงความเป็น Object Oriented เต็มตัว (มากกว่า
C++ เสียอีก เนื่องจากจำกัดการละเมิดกฎของเป็น Object Oriented เช่น การใช้ Global
data) และ Java ได้ถูกพัฒนาโดยคำนึงถึงความปลอดภัย (security) จึงหมดปัญหาเรื่องไวรัส
เรามาดูจุดเด่นของ Java
- ง่าย (simple) เนื่องจาก Java มีเค้าโครงมาจากภาษา C++ จึงง่ายสำหรับการพัฒนา
เพราะภาษา C++ รู้จักกันแพร่หลาย นอกจากนั้นยังกำจัดบางส่วนของ C++ ทิ้งไป
ได้แก่ ส่วนที่ใช้น้อย ลึกซึ้ง หรือเกินความจำเป็น Java ถูกออกแบบให้เขียนง่าย
จึงทำให้การเขียนโปรแกรมผิดน้อยลง
- โปรแกรมเชิงวัตถุ (Object Oriented) Java ไม่เหมือน C++ ตรงที่ Java ต้องการทุกสิ่งทุกอย่างเป็นรูปแบบ
Object ข้อมูลแบบ Global และ Standalone function น่าจะทำไม่ได้ใน Java คลาสทุกคลาสต้องสืบทอดจากคลาสบรรพบุรุษ
โดยทางตรงหรือทางอ้อม
- ประมวลผลแบบกระจาย (Distributed) Java ได้ถูกพัฒนาเพื่อใช้กับเน็ตเวิร์ค
Java ได้พัฒนามาจากความสามารถของ TCP/IP และ HTTP แต่ใช่ว่า Java จะสามารถทำงานได้กับ
Web เท่านั้น Java ยังสามารถใช้แทน C++ ในการพัฒนางานภายในบริษัทได้เป็นอย่างดี
บริษัทซันได้บอกกับเราว่า Java จะรวมเทคโนโลยีกับ COBRA ซึ่งจะทำให้เกิดการประมวลผลระยะไกลได้เป็นอย่างดี
- ผ่านการแปลมาแล้ว (Interpreted) ภาษา Java นั้นเหมือนกับภาษาอื่นๆ คือ เราต้องเขียนโปรแกรมต้นฉบับ
(Source Code) ขึ้นมาก่อน โดยไฟล์ต้นฉบับของ Java จะมีนามสกุล .java แล้วแปลโปรแกรมต้นฉบับนั้นเป็นโปรแกรมที่สามารถใช้ปฏิบัติงาน
(RUN) ภาษา Java ต่างกับภาษาอื่นๆ ตรงที่ Java จะถูกแปลเป็นรูปแบบ (format)
ที่สามารถปฏิบัติงานได้ทุก platform รูปแบบที่ผ่านการแปลมาแล้วจะถูกเรียกว่า
Java bytecode รูปแบบ bytecode ของ Java สามารถใช้ได้ทุก platform จึงไม่ใช้เรื่องแปลกที่อนาคตจะมีโปรแกรมหรือภาษาต้นฉบับหลายๆ
แบบที่สามารถแปลมาเป็น bytecode รูปแบบของ Java bytecode นี้พัฒนามาจาก P-system
ของ Kenneth Bowles ที่ใช้ใน UCSD Pascal ซึ่งเรามักจะเรียกว่า P-code
- แข็งแกร่ง (Robust) คุณสมบัติที่ดีที่สุดและแย่ที่สุดของภาษาคอมพิวเตอร์อย่างเช่น
C และ C++ ก็คือ การใช้ตัวชี้ (pointer) การใช้ตัวชี้และการจัดการกับตัวชี้จะมีประโยชน์มากสำหรับโปรแกรมเมอร์ที่มีความเชี่ยวชาญ
แต่เรามักพบปัญหา (bug) อยู่มากมาย ปัญหาเล่านี้หลายๆ ครั้งทำให้โปรแกรมหยุดทำงานไปเฉยๆ
โดยไม่รู้สาเหตุ การใช้ตัวชี้ทำให้เราต้องระมัดระวังว่าเราใช้หน่วยความจำส่วนใด
มีการจอง (allocate) ยกเลิก (deallocate) แล้วหรือยัง มีการซ้อนทับกันหรือไม่
Java ได้ทำการกำจัดการจัดการกับตัวชี้ทั้งหมด (Java จะจัดการเกี่ยงกับหน่วยความจำให้เราทั้งหมด)
นอกจากนี้ Java ยังมีส่วนการจัดการกับหน่วยความจำที่ว่างจากการใช้ (garbage
collection)
- ปลอดภัย (secure) Java จะอยู่ในส่วนของไคล์เอ็นต์เทคโนโลยี หลังจาก Java
ถูกแปลเป็น bytecode ตัว Java จะถูกนำมาจาก (Download) Web Server เนื่องจาก
Java จะอยู่ทุกที่ในโลกของเรา จึงมีคนคิดที่จะทำไวรัสเพื่อแพร่กระจายสู่เครื่องต่างๆ
สำหรับ Java นั้นตัวปฏิบัติงาน (Java Runtime) จะทำการตรวจพิสูจน์ (verify)
bytecode ที่ทำงานบนเครื่องของเรา ถ้า bytecode ที่ได้มามีความปลอดภัย (safe)
ตัวปฏิบัติงานจะยอมให้ bytecode ทำงาน แต่ถ้า bytecode ไม่ปลอดภัยตัวปฏิบัติงานจะปฏิเสธการทำงานของ
bytecode
- สถาปัตยกรรมที่เป็นกลางและเคลื่อนย้ายได้สะดวก (Architecture-neutral and
portable) ตัว Java bytecode จะเป็นอิสระจากสถาปัตยกรรมคอมพิวเตอร์ โดยออกแบบให้เป็นกลางมากที่สุด
ไม่ยึดสถาปัตยกรรมใดๆ เป็นหลัก สำหรับตัวปฏิบัติงาน (Java Runtime) ก็เตรียมพร้อมสำหรับทุก
platform นอกจากนั้น Java ยังใช้มาตรฐานการกำหนดตัวอักษรยูนิโค้ด (Unicode)
ซึ่งทำให้Javaใช้กับข้อมูลของตัวอักษรใดๆ ก็ได้
- ประสิทธิภาพสูง (High Performance) สภาวะแวดล้อมของ Java เป็นแบบ interpretive
ซึ่งเราทราบอยู่แล้วว่าการทำงานแบบ interpret นั้นทำงานได้ช้า ในกลุ่มที่พูดคุยเกี่ยวกับ
Java (Java News group) ได้พูดกันว่า Java ทำงานได้ช้ากว่าโปรแกรมที่ออกแบบสำหรับคอมพิวเตอร์นั้นๆ
(Native CPU language) 20-30 เท่า และช้ากว่าโปรแกรมอื่นๆ บนเน็ตเวิร์คประมาณ
5 เท่า บริษัทซันสัญญาว่าจะทำให้ Java มีประสิทธิภาพที่เป็นคู่แข่งกับ C/C++
เมื่อ Java ถูกใช้งานในสภาวะแวดล้อม interpret ให้อยู่ในรูปแบบการแปลทั้งหมด
("Just-in-time" Class compiler)
- ทำงานหลายอย่างพร้อมกันในโปรแกรมเดียว (Multithreaded) การทำงานแบบ Multithreaded
นั้น เพิ่มประสิทธิภาพในการโต้ตอบกับผู้ใช้ (Interactive) และยังเพิ่มประสิทธิภาพในการทำงาน
ภายในโปรแกรมนั้น Java ได้ถูกออกแบบให้เป็น Multithread programming จึงทำให้
Java สามารถทำงานได้หลายๆ อย่างพร้อมกัน Java ได้ยืมสภาวะแวดล้อม Cedar จาก
XEROX และรูปแบบภาษา seminal Mesa ซึ่งเป็นภาษาสำหรับทำ Multithreaded ได้เป็นอย่างดี
- ไม่หยุดนิ่ง (Dynamic) ผู้ที่ทำงานกับการพัฒนาซอฟต์แวร์จะทราบว่าตัวซอฟต์แวร์
(และความต้องการ) นั้นมีการเปลี่ยนแปลงและพัฒนาอยู่เสมอ การเปลี่ยนแปลงแก้ไข
(ปัญหาหรือความต้องการที่เพิ่มขึ้น) เพิ่มเติม เราจะพบปัญหาอยู่เสมอๆ การเปลี่ยนแปลงบางส่วนทำให้เราต้องทำการแปลใหม่ทั้งหมด
ทำการติดตั้งกับผู้ใช้ ทดสอบ พบปัญหา แก้ปัญหา และนำไปติดตั้งใหม่ การใช้งานของ
C++ เรามักจะพบกับการ recompile เมื่อมีการเปลี่ยนแปลง parent class ซึ่งเราเรียกว่าความเปราะบางของคลาสชั้นบน
(fragile super class problem) ใน Java โปรแกรมสามารถแก้ไขในแบบทันที (dynamic
patch) การแก้ไขเราแก้ไขที่บางคลาส และตัวโปรแกรมที่เราเขียนจะอยู่บน Web Server
ซึ่งทำให้การแก้ไขนั้นมีผลกับทุกเครื่องคอมพิวเตอร์ที่เรียกใช้ Java ที่อยู่บน
Web Server ทำให้เราไม่ต้องเดินไปทำการติดตั้งซอฟต์แวร์ใหม่บนเครื่องของผู้ใช้
แม้ว่าผู้ใช้นั้นจะอยู่คนละมุมโลกก็ตาม
เราสามารถใช้ Java เขียนโปรแกรมได้
4 แบบคือ Applications, Applets, Content handlers, Protocol handlers
- Java Applications เป็นแอปพลิเคชั่นที่สามารถทำงานได้ด้วยตนเองเหมือนกับโปรแกรมที่เขียนด้วย
C หรือ C++ ทั่วไป แต่แอปพลิเคชั่นของ Java จะทำงานได้ต้องอาศัย Java Interpreter
ช่วยด้วย ตัวอย่างของแอปพลิเคชั่นที่เขียนด้วย Java ก็คือ Hot Java Web Browser
- Java Applets เป็นแอปพลิเคชั่นขนาดเล็กที่ต้องฝังตัวไว้ในเว็บเพจ Applets
เป็นโปรแกรมที่มีระบบรักษาความปลอดภัยมากกว่าแอปพลิเคชั่นปกติ เนื่องจากมีข้อจำกัดหลายอย่างในพฤติกรรมของ
Applets เช่น Applets ไม่สามารถทำไดนามิกลิงค์กับโปรแกรมที่เขียนด้วย C หรือ
C++ ได้ Applets จะทำงานได้ก็ต้องอาศัยโปรแกรม Browser เพื่อช่วยในการทำงานอีกที
- Content handlers เป็นโปรแกรมของ Java ที่มีจุดประสงค์พิเศษ คือใช้เขียนเพื่อทำให้
Web Browser สามารถเข้าใจข้อมูลชนิดใหม่ เช่น ภาพยนตร์ Quick Time, Voice,
PhotoCD
- Protocol handlers เป็นโปรแกรมที่มีคุณสมบัติคล้ายกับ Content handlers
ต่างกันที่ใช้ทำให้ Web Browser เข้าใจโปรโตคอลใหม่ๆ เช่น MIDI ได้ ดังนั้นโปรแกรมJavaทั้งสองชนิดนี้จะทำให้
Browser เข้าใจและจัดการกับข้อมูลชนิดใหม่ที่ไม่เคยรู้จักมาก่อน คุณจะสามารถดาวน์โหลดข้อมูลที่ตัว
Browser ไม่รู้จักขึ้นมาใช้ได้ แนวคิดในการใช้ Handler นี้จะคล้ายกับ Helper
apps ของ Netscape ต่างกันที่ Handler ของ Java จะมีความปลอดภัยมากกว่า ดังนั้น
Handler จึงเป็นส่วนประกอบที่สำคัญในการเขียนแอปพลิเคชั่นสำหรับอินเตอร์เน็ต
ลอกมาจากหนังสือ Internet Magazine ฉบับที่ 01