//จาก <คู่มือนักพัฒนา Delphi 5>
1.2 เดลฟีคืออะไร?
เรามักถามคำถามเช่น: "อะไรทำให้ Delphi ดีขนาดนี้" และ "เหตุใดฉันจึงชอบ Delphi มากกว่าเครื่องมือการเขียนโปรแกรมอื่นๆ" หลายปีที่ผ่านมา เราได้คำตอบมาสองคำตอบ คำตอบยาวและคำตอบสั้นๆ สำหรับคำถามแบบนี้ คำตอบสั้นๆ คือ: ประสิทธิภาพ ในการสร้างแอปพลิเคชัน Windows การใช้ Delphi เป็นวิธีที่ง่ายที่สุดที่เราหาได้ แน่นอนว่าบางคน (เจ้านายและลูกค้าในอนาคต) ไม่พอใจกับคำตอบนี้ ดังนั้นเราจึงต้องนำเสนอคำตอบโดยละเอียด ซึ่งแสดงให้เห็นการรวมกันของปัจจัยต่างๆ ที่ทำให้ Delphi มีประสิทธิภาพมาก เราสรุปปัจจัยที่กำหนดประสิทธิภาพของเครื่องมือพัฒนาซอฟต์แวร์ออกเป็นห้าประเด็นต่อไปนี้:
• ประสิทธิภาพของสภาพแวดล้อมการพัฒนาภาพ
• ความเร็วของคอมไพเลอร์และประสิทธิภาพของโค้ดที่คอมไพล์
• ความสามารถของภาษาการเขียนโปรแกรมและความซับซ้อน
• ความยืดหยุ่นและความสามารถในการปรับขนาดของโครงสร้างฐานข้อมูล
• ส่วนขยายกรอบงานเพื่อการออกแบบและรูปแบบการใช้งาน
แม้ว่าจะมีปัจจัยอื่นๆ มากมายที่ควรรวมไว้ด้วย เช่น การกำหนดค่า เอกสาร การสนับสนุนจากบุคคลที่สาม ฯลฯ เราพบว่านี่เป็นวิธีที่แม่นยำและง่ายที่สุดในการอธิบายให้ผู้คนทราบว่าเหตุใดเราจึงเลือก Delphi แน่นอนว่าห้าประเด็นข้างต้นอาจมีปัจจัยเชิงอัตวิสัยอยู่บ้าง แต่สิ่งสำคัญคือ คุณจะมีประสิทธิภาพเพียงใดเมื่อใช้เครื่องมือเฉพาะเพื่อการพัฒนา ดังแสดงในรูปที่ 1-1 ประสิทธิภาพด้านต่างๆ ของเครื่องมือจะได้รับการประเมินและหาปริมาณ (ระหว่าง 1 ถึง 5) และทำเครื่องหมายไว้บนแต่ละแกนของรูปที่ 1-1 ในที่สุด ก็สามารถหารูปห้าเหลี่ยมได้ ยิ่งพื้นที่รูปห้าเหลี่ยมมีขนาดใหญ่ เครื่องมือนี้ก็จะยิ่งมีประสิทธิภาพมากขึ้นเท่านั้น
ไม่จำเป็นต้องบอกคุณว่าคำตอบที่เราได้รับเมื่อใช้วิธีนี้ คุณจะค้นพบตัวเองทันทีที่ลองใช้! มาดูประสิทธิภาพของ Delphi ในด้านเหล่านี้ให้ละเอียดยิ่งขึ้น และเปรียบเทียบกับเครื่องมือพัฒนา Windows อื่นๆ
1.2.1 สภาพแวดล้อมการพัฒนาภาพ
สภาพแวดล้อมการพัฒนาด้วยภาพมักจะแบ่งออกเป็นสามองค์ประกอบ: ตัวแก้ไข ดีบักเกอร์ และผู้ออกแบบฟอร์ม เช่นเดียวกับเครื่องมือ RAD (การพัฒนาแอปพลิเคชันอย่างรวดเร็ว) สมัยใหม่ส่วนใหญ่ ทั้งสามส่วนนี้จะทำงานร่วมกัน ขณะที่คุณทำงานเป็นผู้ออกแบบฟอร์ม Delphi จะสร้างโค้ดเบื้องหลังโดยอัตโนมัติสำหรับส่วนควบคุมที่คุณกำลังจัดการบนแบบฟอร์ม คุณยังสามารถเพิ่มโค้ดด้วยตัวเองในตัวแก้ไขเพื่อกำหนดลักษณะการทำงานของแอปพลิเคชัน และคุณยังสามารถดีบักโปรแกรมโดยการตั้งค่าเบรกพอยต์และจุดตรวจสอบในตัวแก้ไขเดียวกัน
โดยทั่วไป ตัวแก้ไขของ Delphi นั้นคล้ายคลึงกับตัวแก้ไขของเครื่องมืออื่น ๆ แต่เทคโนโลยี Code Insight ช่วยประหยัดงานอินพุตได้มาก เทคโนโลยีนี้ใช้ข้อมูลคอมไพเลอร์มากกว่าไลบรารีประเภทเช่น Visual Basic ดังนั้นจึงมีแอปพลิเคชันที่หลากหลายมากขึ้น แม้ว่าตัวแก้ไขของ Delphi จะมีตัวเลือกการกำหนดค่าที่ดีมากมาย แต่ฉันคิดว่าตัวแก้ไขของ Visual Studio มีพื้นที่สำหรับการกำหนดค่ามากกว่า ในเวอร์ชัน 5 ฟังก์ชันดีบักเกอร์ของ Delphi ได้ทันกับดีบักเกอร์ของ Visual Studio ในที่สุด พร้อมด้วยคุณสมบัติขั้นสูงมากมาย เช่น การดีบักระยะไกล การเชื่อมโยงกระบวนการ DLL และการแก้ไขข้อบกพร่องของแพ็คเกจ การตรวจสอบภายในเครื่องโดยอัตโนมัติ และหน้าต่าง CPU Delphi ยังสนับสนุนการวางและเชื่อมต่อหน้าต่างแบบสุ่มในขณะที่แก้ไขจุดบกพร่องและบันทึกสถานะนี้เป็นการตั้งค่าเดสก์ท็อปของคำสั่ง ด้วยเหตุนี้ IDE ของ Delphi จึงได้รับการสนับสนุนที่ดีสำหรับฟังก์ชันการดีบัก
ดังที่เห็นได้บ่อยในสภาพแวดล้อมแบบรวมบางรายการ (เช่น VB และเครื่องมือ Java บางตัว) ข้อดีของดีบักเกอร์ที่สมบูรณ์มากคือเมื่อแอปพลิเคชันได้รับการดีบั๊ก แอปพลิเคชันจะสามารถแก้ไขโค้ดได้ ซึ่งส่งผลให้ลักษณะการทำงานของแอปพลิเคชันเปลี่ยนไป น่าเสียดายที่ Delphi ไม่รองรับฟังก์ชันนี้ เนื่องจากมีความซับซ้อนเกินกว่าจะนำไปใช้เมื่อคอมไพล์เป็นเนทีฟโค้ด
สำหรับเครื่องมือ RAD (เช่น Delphi, Visual Basic, C++ Builder และ PowerBilder เป็นต้น) ตัวออกแบบฟอร์มถือเป็นคุณลักษณะเฉพาะ สภาพแวดล้อมการพัฒนาแบบคลาสสิกบางส่วน เช่น VC++ และ BC++ มีตัวแก้ไขการสนทนา แต่ไม่รวมตัวออกแบบฟอร์มเข้ากับกระบวนการพัฒนา ดังที่เห็นได้จากแผนภูมิประสิทธิภาพในรูปที่ 1-1 การไม่มีผู้ออกแบบแบบฟอร์มจะลดประสิทธิภาพโดยรวมของเครื่องมือการพัฒนา ในช่วงไม่กี่ปีที่ผ่านมา Delphi และ Visual Basic ได้แข่งขันกันอย่างดุเดือดเพื่อปรับปรุงฟังก์ชันการทำงานของตัวออกแบบฟอร์ม เวอร์ชันใหม่แต่ละเวอร์ชันมีคุณสมบัติที่ดีกว่าเวอร์ชันล่าสุด สิ่งที่ทำให้ผู้ออกแบบแบบฟอร์มของ Delphi มีเอกลักษณ์เฉพาะตัวก็คือ Delphi ถูกสร้างขึ้นบนเฟรมเวิร์กเชิงวัตถุที่แท้จริง ด้วยวิธีนี้ การเปลี่ยนแปลงที่คุณทำกับคลาสพื้นฐานจะถูกเผยแพร่ไปยังคลาสที่ได้รับทั้งหมด หนึ่งในเทคโนโลยีสำคัญที่เกี่ยวข้องที่นี่คือ VFI (การสืบทอดรูปแบบภาพ) ซึ่งเป็นการสืบทอดรูปแบบภาพ เทคโนโลยี VFI ช่วยให้คุณสามารถสืบทอดแบบไดนามิกจากรูปแบบอื่น ๆ ในโปรเจ็กต์ปัจจุบันหรือไลบรารีอ็อบเจ็กต์ เมื่อใดก็ตามที่รูปแบบพื้นฐานเปลี่ยนแปลง แบบฟอร์มที่ได้รับจะถูกอัพเดตทันที คุณลักษณะที่สำคัญนี้มีอธิบายโดยละเอียดในบทที่ 4 "กรอบงานและการออกแบบแอปพลิเคชัน"
1.2.2 ความเร็วของคอมไพเลอร์และประสิทธิภาพของโค้ดที่คอมไพล์
คอมไพเลอร์ที่รวดเร็วช่วยให้คุณพัฒนาซอฟต์แวร์ทีละขั้นตอน แก้ไขซอร์สโค้ดบ่อยครั้ง คอมไพล์ใหม่ ทดสอบ ปรับเปลี่ยนอีกครั้ง คอมไพล์อีกครั้ง ทดสอบอีกครั้ง... ก่อให้เกิดวงจรการพัฒนาที่ดีเช่นนี้ หากความเร็วในการคอมไพล์ช้ามาก นักพัฒนาจะต้องแก้ไขโค้ดเป็นชุด โดยทำการเปลี่ยนแปลงหลายครั้งก่อนการคอมไพล์แต่ละครั้งเพื่อปรับให้เข้ากับกระบวนการลูปที่ไม่มีประสิทธิภาพ ช่วยปรับปรุงประสิทธิภาพการทำงาน ประหยัดเวลาในการทำงาน และสร้างรหัสไบนารี่ที่สั้นลง
บางทีคุณสมบัติที่มีชื่อเสียงที่สุดของคอมไพเลอร์ Pascal ก็คือความเร็วของมัน และ Delphi ก็ถูกสร้างขึ้นบนคอมไพเลอร์นี้ ในความเป็นจริง นี่อาจเป็นคอมไพเลอร์โค้ดเนทีฟภาษาระดับสูงที่เร็วที่สุดสำหรับ Windows คอมไพเลอร์ C++ ที่เคยช้ามีความก้าวหน้าอย่างมากในช่วงไม่กี่ปีที่ผ่านมา โดยเพิ่มการเชื่อมโยงและกลยุทธ์การแคชที่หลากหลาย โดยเฉพาะใน Visual C++ และ C++ Builder แต่ถึงอย่างนั้น คอมไพเลอร์ C++ ก็ยังช้ากว่าของ Delphi หลายเท่า
ความเร็วในการคอมไพล์จำเป็นต้องแปรผันตามประสิทธิภาพการทำงานหรือไม่? ไม่แน่นอน Delphi และ C++Builder ใช้แบ็คเอนด์คอมไพเลอร์เดียวกัน ดังนั้นโค้ดที่สร้างขึ้นจึงเทียบเท่ากับโค้ดที่สร้างโดยคอมไพเลอร์ C++ ที่ดี ตามมาตรฐานการประเมินที่เชื่อถือได้ล่าสุด Visual C++ ได้รับการพิจารณาหลายครั้งว่ามีประสิทธิภาพสูงสุดในแง่ของความเร็วในการคอมไพล์และความยาวของโค้ดที่สร้างขึ้น ต้องขอบคุณมาตรการปรับให้เหมาะสมที่ทรงพลังอย่างยิ่ง แม้ว่าข้อดีเล็กๆ น้อยๆ เหล่านี้จะสังเกตเห็นได้ยากสำหรับการพัฒนาแอปพลิเคชันทั่วไป แต่ก็อาจมีประโยชน์ได้หากคุณกำลังเขียนโค้ดคำนวณที่ซับซ้อน
เทคโนโลยีการคอมไพล์ของ Visual Basic มีความพิเศษเล็กน้อย ในระหว่างการพัฒนา VB ดำเนินการในลักษณะบูรณาการและตอบสนองค่อนข้างมาก คอมไพเลอร์นี้ทำงานช้ากว่าและโค้ดปฏิบัติการที่สร้างขึ้นมีประสิทธิภาพน้อยกว่าเครื่องมือ Delphi และ C++ มาก
Java เป็นอีกหนึ่งภาษาที่น่าสนใจ ภาษาเครื่องมือที่ใช้ Java ล่าสุด JB uilder และ Visual J++ อ้างว่าความเร็วในการคอมไพล์สามารถจับคู่ได้
เทียบได้กับ Delphi แต่ประสิทธิภาพในการดำเนินการของโค้ดที่สร้างขึ้นไม่เป็นที่น่าพอใจเนื่องจาก Java เป็นภาษาที่ผสานรวม แม้ว่า Jave จะมีความก้าวหน้าอย่างต่อเนื่อง แต่ความเร็วในการทำงานก็ยังตามหลัง Delphi และ C++ มากในสถานการณ์ส่วนใหญ่
1.2.3 ฟังก์ชั่นและความซับซ้อนของภาษาการเขียนโปรแกรม
ฟังก์ชั่นและความซับซ้อนของภาษาอยู่ในสายตาของผู้ดูและเป็นประเด็นที่ถกเถียงกันมากมาย สิ่งที่เรียบง่ายสำหรับคนหนึ่งอาจเป็นเรื่องยากสำหรับบุคคลนั้น สิ่งที่อาจมีข้อจำกัดในการใช้งานสำหรับคนหนึ่งอาจสมบูรณ์แบบสำหรับอีกคนหนึ่ง ดังนั้นประเด็นต่อไปนี้จึงขึ้นอยู่กับประสบการณ์และความเข้าใจส่วนตัวของผู้เขียนเท่านั้น
แอสเซมบลีเป็นภาษาพื้นฐานที่ทรงพลังที่สุด คุณสามารถทำอะไรได้เกือบทุกอย่างกับมัน อย่างไรก็ตาม แม้แต่การพัฒนาแอปพลิเคชันที่ง่ายที่สุดในการประกอบก็ทำได้ยากมากและอาจไม่ได้ผลอะไรเลย ไม่เพียงเท่านั้น แต่การเก็บโค้ดแอสเซมบลีไว้ในสภาพแวดล้อมการพัฒนากลุ่มเป็นระยะเวลาเท่าใดก็ได้บางครั้งก็เป็นไปไม่ได้เลย เมื่อโค้ดถูกส่งจากคนหนึ่งไปยังอีกคนหนึ่งและคนถัดไป แนวคิดและความตั้งใจในการออกแบบก็เริ่มไม่ชัดเจนมากขึ้น จนกระทั่งโค้ดดูเหมือนหนังสือจากสวรรค์ ด้วยเหตุนี้ เราจึงให้คะแนนการประกอบต่ำมาก เนื่องจากมีประสิทธิภาพแต่ซับซ้อนเกินไปสำหรับนักพัฒนาเกือบทั้งหมด
C++ เป็นอีกหนึ่งภาษาที่ทรงพลังอย่างยิ่ง ด้วยความช่วยเหลือของคุณสมบัติที่เป็นไปได้ (เช่น มาโครตัวประมวลผลล่วงหน้า เทมเพลต การโหลดตัวดำเนินการ ฯลฯ) คุณแทบจะออกแบบภาษาของคุณเองโดยใช้ C++ ได้ ตราบใดที่คุณใช้ตัวเลือกการทำงานที่หลากหลายอย่างเหมาะสม คุณก็สามารถพัฒนาโค้ดที่กระชับ ใช้งานง่าย และบำรุงรักษาง่ายได้ อย่างไรก็ตาม ปัญหาก็คือนักพัฒนาซอฟต์แวร์จำนวนมากใช้คุณสมบัติเหล่านี้ในทางที่ผิด ซึ่งอาจนำไปสู่ข้อผิดพลาดร้ายแรงได้ง่าย ในความเป็นจริง การเขียนโค้ด C++ ที่ไม่ดีนั้นง่ายกว่าการเขียนโค้ด C++ ที่ดี เพราะตัวภาษาเองจะไม่ไปในทิศทางของการออกแบบที่ดี - นั่นก็ขึ้นอยู่กับนักพัฒนา
Object Pascal และ Java รู้สึกคล้ายกับเรามากเพราะเข้าใจความสมดุลของความซับซ้อนและฟังก์ชันการทำงานเป็นอย่างดี พวกเขาทั้งหมดใช้วิธีการจำกัดฟังก์ชันการทำงานที่มีอยู่เพื่อปรับปรุงการออกแบบเชิงตรรกะของนักพัฒนา ตัวอย่างเช่น ทั้งสองหลีกเลี่ยงแนวคิดเชิงวัตถุอย่างสมบูรณ์แต่ถูกนำไปใช้ในทางที่ผิดอย่างง่ายดายของการสืบทอดหลายรายการ และใช้คลาสเดียวที่ทำหน้าที่การทำงานของหลายอินเทอร์เฟซแทน ไม่รองรับการโหลดของผู้ปฏิบัติงานที่สวยงามแต่เป็นอันตราย ทั้งสองมีคุณสมบัติที่มีประสิทธิภาพ เช่น การจัดการข้อยกเว้น ข้อมูลประเภทรันไทม์ (RT TI) และหน่วยความจำอายุการใช้งานสตริงที่จัดการด้วยตนเอง ในเวลาเดียวกัน ไม่มีภาษาใดเขียนโดยกองบรรณาธิการโดยเฉพาะ แต่มาจากบุคคลหรือกลุ่มภายในองค์กรเดียวที่มีความเข้าใจในภาษาเดียวกัน
Visual Basic ได้รับการออกแบบมาเพื่อให้ผู้เริ่มต้นเริ่มต้นและก้าวหน้าได้เร็วขึ้น (จึงเป็นที่มาของชื่อ) แต่ในฐานะภาษา VB ต้องเรียนรู้จากจุดแข็งและจุดอ่อนของมันอย่างต่อเนื่อง ซึ่งทำให้ภาษามีความซับซ้อนมากขึ้นเรื่อยๆ ในช่วงไม่กี่ปีที่ผ่านมา เพื่อซ่อนรายละเอียดเหล่านี้ไม่ให้นักพัฒนาเห็น VB ยังคงรักษาวิซาร์ดบางตัวไว้สำหรับการสร้างโปรเจ็กต์ที่ซับซ้อน
1.2.4 ความยืดหยุ่นและความยืดหยุ่นของโครงสร้างฐานข้อมูล
เนื่องจาก Borland ขาดโครงร่างฐานข้อมูล Delphi จึงยังคงรักษาสิ่งที่เราพิจารณาว่าเป็นโครงสร้างฐานข้อมูลที่ยืดหยุ่นที่สุดในบรรดาเครื่องมือทั้งหมด BDE มีประสิทธิภาพมากสำหรับแอปพลิเคชันส่วนใหญ่ที่ใช้แพลตฟอร์มฐานข้อมูลภายในเครื่อง ไคลเอ็นต์/เซิร์ฟเวอร์ และ ODBC หากคุณไม่พอใจกับสิ่งนี้ คุณสามารถหลีกเลี่ยงการใช้ BDE แทนคอมโพเนนต์ ADO ดั้งเดิมใหม่ได้ หากคุณไม่ได้ติดตั้ง ADO คุณสามารถสร้างคลาสการเข้าถึงข้อมูลของคุณเองหรือซื้อโซลูชันการเข้าถึงข้อมูลของบริษัทอื่นได้ นอกจากนี้ MIDAS ยังทำให้การเข้าถึงแหล่งข้อมูลหลายระดับง่ายต่อการนำไปใช้อีกด้วย เครื่องมือของ Microsoft (ODBC, OLE DB หรืออื่น ๆ ) มีแนวโน้มที่จะสนับสนุนฐานข้อมูลและโซลูชันการเข้าถึงข้อมูลของ Microsoft เอง
1.2.5 การขยายกรอบงานเพื่อการออกแบบและรูปแบบการใช้งาน
นี่เป็นคุณลักษณะสำคัญที่มักถูกมองข้ามโดยเครื่องมือออกแบบซอฟต์แวร์อื่นๆ VCL เป็นองค์ประกอบที่สำคัญที่สุดของ Delphi ความสามารถในการจัดการส่วนประกอบ ณ เวลาออกแบบ สร้างส่วนประกอบ และการใช้เทคโนโลยี OO (เชิงวัตถุ) เพื่อสืบทอดพฤติกรรมของส่วนประกอบอื่นๆ เป็นปัจจัยสำคัญที่กำหนดประสิทธิภาพของ Delphi ในหลายกรณี ส่วนประกอบ VCL ถูกเขียนโดยใช้แนวทางการออกแบบ OO แบบคงที่ ในการเปรียบเทียบ กรอบงานแบบอิงส่วนประกอบอื่นๆ มักจะเข้มงวดหรือซับซ้อนเกินไป ตัวอย่างเช่น ตัวควบคุม Active X มีความสามารถในขณะออกแบบเหมือนกับตัวควบคุม VCL แต่ไม่สามารถสืบทอดเพื่อสร้างคลาสใหม่ที่มีพฤติกรรมแตกต่างกันได้ เฟรมเวิร์กคลาสแบบดั้งเดิม เช่น OWL และ MFC ต้องการให้คุณมีความรู้มากมายเกี่ยวกับโครงสร้างภายใน และหากไม่มีการสนับสนุนในเวลาออกแบบจากเครื่องมือ RAD ฟังก์ชันการทำงานของพวกมันจะถูกขัดขวาง เครื่องมือที่สามารถแข่งขันกับฟังก์ชันการทำงานของ VCL ในอนาคตคือ WFC (Windows Foundation Classes) ของ Visual J++ ซึ่งเป็น Windows Foundation Class แต่เนื่องจากการฟ้องร้องของ Sun Microsystems เกี่ยวกับปัญหา Java ยังคงค้างอยู่ อนาคตของ Visual J++ จึงไม่ชัดเจน