1.1 รู้เบื้องต้นเกี่ยวกับรูปแบบ

ดังที่ได้กล่าวไว้ก่อนหน้านี้ โปรแกรมเมอร์เริ่มทำงานกับโปรแกรมโดยการออกแบบแบบจำลอง: รวบรวมรายชื่อเอนทิตีที่โปรแกรมจะดำเนินการ และยิ่งมีเอนทิตีในโปรแกรมมากเท่าไหร่ โปรแกรมก็ยิ่งซับซ้อนมากขึ้นเท่านั้น

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

สำคัญ! ในภาษารัสเซีย คำว่า design มักหมายถึงการออกแบบกราฟิก ซึ่งไม่ใช่ในภาษาอังกฤษ การออกแบบคำในภาษาอังกฤษมีความหมายใกล้เคียงกับคำว่า "การออกแบบ" และ / หรือ "อุปกรณ์" ตัวอย่างเช่น การออกแบบเครื่องยนต์ไม่ใช่รูปร่างหน้าตา แต่เป็นโครงสร้างภายใน

ดังนั้น รูปแบบการออกแบบจึงเป็นรูปแบบ/รูปแบบการออกแบบ ฉันขอแนะนำให้คุณหยุดใช้คำว่าการออกแบบในแง่ของ "รูปลักษณ์" โดยสิ้นเชิง คุณคือวิศวกรซอฟต์แวร์ในอนาคต และสำหรับคุณ การออกแบบก็คือการออกแบบอย่างแท้จริง

รูปแบบการออกแบบนี้คืออะไร? ประการแรก รูปแบบการออกแบบเป็นวิธีแก้ปัญหามาตรฐาน โซลูชันที่ดี มีประสิทธิภาพและผ่านการทดสอบตามเวลา

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

โดยทั่วไปแล้ว เทมเพลตไม่ใช่โซลูชันที่สมบูรณ์ที่สามารถแปลงเป็นโค้ดได้โดยตรง แต่เป็นเพียงตัวอย่างโซลูชันที่ดีสำหรับปัญหาที่สามารถใช้ได้ในสถานการณ์ต่างๆ

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

1.2 ประวัติการออกแบบลวดลาย

ย้อนกลับไปในทศวรรษที่ 70 โปรแกรมเมอร์ต้องเผชิญกับความจำเป็นในการพัฒนาโปรแกรมขนาดใหญ่ที่ต้องทำงานโดยทีมพัฒนาทั้งหมด มีการลองใช้วิธีการต่างๆ ในการจัดงาน แต่อุตสาหกรรมการก่อสร้างมีอิทธิพลต่อการพัฒนามากที่สุด

เพื่อจัดระเบียบการทำงานของคนกลุ่มใหญ่ แนวทางปฏิบัติและแนวทางจากอุตสาหกรรมการก่อสร้างถูกนำมาใช้ โดยวิธีการจากที่นั่นคำศัพท์เช่นการประกอบ (สร้าง) นักพัฒนาซอฟต์แวร์ (ผู้สร้าง) และแนวคิดของสถาปัตยกรรมเข้ามาในการเขียนโปรแกรม

และอย่างที่คุณคาดเดา แนวคิดรูปแบบการออกแบบก็นำมาจากอุตสาหกรรมการก่อสร้างเช่นกัน คริสโตเฟอร์ อเล็กซานเดอร์ อธิบายแนวคิดของรูปแบบเป็นครั้งแรกใน The Pattern Language เมือง อาคาร. การก่อสร้าง". ในหนังสือเล่มนี้ มีการใช้ภาษารูปแบบพิเศษเพื่ออธิบายกระบวนการออกแบบเมือง

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

ดังนั้นจึงไม่น่าแปลกใจที่ในปี 1994 หนังสือ "เทคนิคการออกแบบเชิงวัตถุ Design Patterns” ซึ่งมี 23 รูปแบบที่ช่วยแก้ปัญหาต่างๆ ของการออกแบบเชิงวัตถุ

หนังสือเล่มนี้เขียนโดยผู้เขียน 4 คน ได้แก่ Erich Gamma, Richard Helm, Ralph Johnson และ John Vlissides ชื่อหนังสือยาวเกินกว่าใครจะจำได้ ดังนั้นในไม่ช้าทุกคนก็เริ่มเรียกมันว่า "หนังสือโดยแก๊งสี่คน" นั่นคือ"หนังสือจากแก๊งสี่คน"แล้วก็แม้แต่ "หนังสือ GoF"

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

สำคัญ! รูปแบบไม่ใช่วิธีแก้ปัญหาแบบพิเศษ แต่ในทางกลับกัน วิธีแก้ปัญหาทั่วไปที่พบได้บ่อยสำหรับปัญหาเดียวกัน โซลูชันที่ได้รับการพิสูจน์แล้วอย่างดี

1.3 รายการรูปแบบ

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

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

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

  • โซลูชั่นที่ได้รับการพิสูจน์แล้ว คุณใช้เวลาน้อยลงโดยใช้โซลูชันที่หาซื้อได้ทั่วไป แทนที่จะต้องประดิษฐ์ล้อขึ้นมาใหม่ การตัดสินใจบางอย่างคุณอาจคิดได้เอง แต่หลายๆ อย่างอาจเป็นการค้นพบสำหรับคุณ
  • การกำหนดมาตรฐานรหัส คุณคำนวณผิดพลาดน้อยลงเมื่อออกแบบโดยใช้โซลูชันแบบรวมศูนย์ทั่วไป เนื่องจากพบปัญหาที่ซ่อนอยู่ในปัญหาเหล่านั้นมานานแล้ว
  • พจนานุกรมโปรแกรมทั่วไป คุณพูดชื่อรูปแบบแทนที่จะใช้เวลาหนึ่งชั่วโมงอธิบายให้โปรแกรมเมอร์คนอื่นๆ ทราบว่าคุณคิดการออกแบบเจ๋งๆ ออกมาได้อย่างไร และคลาสใดที่จำเป็นสำหรับสิ่งนี้

มีรูปแบบอะไรบ้าง?

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

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

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

แต่สิ่งสำคัญคือรูปแบบแตกต่างกันในวัตถุประสงค์ รูปแบบที่เราจะทำความคุ้นเคยสามารถแบ่งออกเป็นสามกลุ่มหลัก:

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

1.4 รู้เบื้องต้นเกี่ยวกับ UML

เริ่มต้นด้วยการดูรูปแบบ 23 แบบเดียวกับที่อธิบายไว้ในหนังสือ Gang of Four ทั้งรูปแบบและชื่อเป็นสิ่งที่คุ้นเคยแม้กระทั่งสำหรับโปรแกรมเมอร์มือใหม่ ฉันจะแนะนำคุณให้รู้จัก แต่ฉันขอแนะนำให้อ่านหนังสือเกี่ยวกับรูปแบบ

รูปแบบการออกแบบไม่ได้เชื่อมโยงกับภาษาการเขียนโปรแกรมเฉพาะ ดังนั้น UML มักจะใช้เพื่ออธิบาย เป็นที่นิยมมากเมื่อ 20 ปีที่แล้ว แต่บางครั้งก็ใช้ อย่างไรก็ตาม คำอธิบายของรูปแบบเป็นเพียงสถานที่ที่ใช้ UML เป็นมาตรฐาน

ด้วย UML คุณสามารถอธิบายความสัมพันธ์ระหว่างเอนทิตีต่างๆ ในกรณีของเรา สิ่งเหล่านี้คือวัตถุและคลาส

ความสัมพันธ์ระหว่างคลาสอธิบายด้วยลูกศรสี่ประเภท:

องค์ประกอบ (องค์ประกอบ) - ชนิดย่อยของการรวมซึ่ง "ส่วน" ไม่สามารถแยกจาก "ทั้งหมด"
การรวม - อธิบายความสัมพันธ์ "ส่วน" - "ทั้งหมด" ซึ่ง "ส่วน" สามารถอยู่แยกต่างหากจาก "ทั้งหมด" รูปสี่เหลี่ยมขนมเปียกปูนจะแสดงจากด้าน "ทั้งหมด"
การพึ่งพา - การเปลี่ยนแปลงในเอนทิตีหนึ่ง (อิสระ) อาจส่งผลต่อสถานะหรือพฤติกรรมของเอนทิตีอื่น (ขึ้นอยู่กับ) เอนทิตีอิสระจะแสดงอยู่ที่ด้านข้างของลูกศร
ลักษณะทั่วไป - ความสัมพันธ์ของการสืบทอดหรือการใช้งานอินเทอร์เฟซ ที่ด้านข้างของลูกศรคือซูเปอร์คลาสหรืออินเทอร์เฟซ

ในความเป็นจริงทุกอย่างง่ายมากที่นี่ ลูกศรสุดท้ายหมายความว่าคลาสหนึ่งสืบทอดมาจากคลาสอื่น และลูกศรที่หนึ่งและสองคือวัตถุหนึ่งเก็บลิงก์ไปยังวัตถุที่สอง และมันคือทั้งหมด

หากเพชรลิงค์เป็นสีดำแสดงว่าลิงค์นั้นอ่อนแอ: วัตถุสามารถอยู่ได้โดยไม่มีกันและกัน หากเพชรเป็นสีขาว แสดงว่าวัตถุนั้นมีความ สัมพันธ์กันอย่างมาก เช่น คลาสHttpRequestและคลาสรองHttpRequest.Builder

1.5 รายการรูปแบบ

ประเภทของรูปแบบจะแสดงด้วยสีและตัวอักษรต่างๆ:

- พฤติกรรม (พฤติกรรม);

- การสร้าง (สร้างสรรค์);

- โครงสร้าง (โครงสร้าง)

และสุดท้ายคือรายการรูปแบบการออกแบบ 23 รูปแบบ:

- โรงงานนามธรรม

- อแดปเตอร์

- สะพาน

- ช่างก่อสร้าง

- ห่วงโซ่ความรับผิดชอบ

- ทีม

- ตัวเชื่อมโยง

- มัณฑนากร

– ซุ้ม

- วิธีการโรงงาน

- นักฉวยโอกาส

- ล่าม

- ตัวทำซ้ำ

- ตัวกลาง

- ผู้รักษาประตู

- ต้นแบบ

- หนังสือมอบฉันทะ

— ผู้สังเกตการณ์

— โดดเดี่ยว

- สถานะ

- กลยุทธ์

— วิธีแม่แบบ

- ผู้เยี่ยมชม