มี OOP การเรียนรู้ที่แตกต่างกันในภาษาการเขียนโปรแกรมที่แตกต่างกันหรือไม่? [ปิด]


9

ฉันต้องการเรียนรู้ OOP ฉันรู้จัก Python และฉันรู้เรื่องเล็ก ๆ น้อย ๆ เกี่ยวกับ OOP

แต่เมื่อฉันค้นหา "เรียนรู้ OOP" ในฟอรัมฉันเห็นชายคนหนึ่งพูดว่า "Python ใหม่มากนั่นคือสาเหตุที่คุณไม่สามารถเรียนรู้ OOP บน Python ได้คุณควรเรียนรู้ Java แล้วเข้าใจ OOP บน Java"

จริงป้ะ? มีความเข้าใจที่แตกต่างกัน OOP ในภาษาการเขียนโปรแกรมที่แตกต่างกันหรือไม่? ชอบเรียนรู้เกี่ยวกับ Java, C #, C ++, Perl หรือ Python หรือไม่


12
"Python ใหม่มากนั่นคือสาเหตุที่คุณไม่สามารถเรียนรู้ OOP บน Pyton ได้คุณเรียนรู้ Java แล้วเข้าใจ OOP บน Java"นั่นไม่มีเหตุผลสำหรับฉัน ถ้าคุณต้องการเรียนรู้ OOP โดยใช้ Python ฉันไม่เห็นสาเหตุใด ๆ ไปเลย!
FrustratedWithFormsDesigner

13
Python เก่ากว่า Java ใช่หรือไม่ ปิดหัวของฉันฉันเชื่อว่ามันเป็น แต่ฉันจะออกไปสองสามปี
Jimmy Hoffa

2
@JimmyHoffa เป็นเรื่องจริง 91 กับ 95 ตาม Wikipedia
Evicatos

2
@JimmyHoffa: เอาละไม่เป็นความจริงใช่มั้ย! เราทุกคนรู้ว่า Java เป็นภาษา OO แรกที่เคยมีมา "Sun ประกาศเสียงดังแปลกใหม่ของ Java" ... - สำหรับคำถาม ... ทำไมคุณถึงตั้งใจเรียน OO? มันจะถูกบังคับให้คุณในไม่ช้า Python เป็นจุดเริ่มต้นที่ยอดเยี่ยมในการรับข้อมูลเชิงลึกเกี่ยวกับประโยชน์ของกระบวนทัศน์การเขียนโปรแกรมที่หลากหลาย
leftaroundabout

คำตอบ:


10

วัตถุที่เป็นโครงสร้างทางทฤษฎีนั้นง่ายมาก: มันเป็นโครงสร้างที่เก็บข้อมูลฟังก์ชันหรือทั้งสองอย่าง ความคิดที่ว่าโครงสร้างเหล่านี้มีความรู้สึกของ "ตัวเอง" ซึ่งเป็นนัยในภาษาส่วนใหญ่นอกของงูหลาม สิ่งนี้เรียกว่า "descriptor" และให้วัตถุเป็นจุดอ้างอิงตนเองที่ผูกข้อมูล (ตัวแปรหรือเขตข้อมูล) และฟังก์ชั่น (โดยทั่วไปเรียกว่าเมธอด) กับวัตถุเฉพาะที่เป็นปัญหา แนวคิดที่ว่าคุณใช้ตัวแปรหรือวิธีการที่เป็นของอินสแตนซ์นั้นโดยเฉพาะ (บล็อกหน่วยความจำที่จัดสรรไว้ด้านล่าง) แทนที่จะสร้างโครงสร้างที่ใหญ่กว่าและมีขนาดใหญ่กว่า

ระบบวัตถุมีแนวโน้มที่จะแตกต่างกันไปตามสองประเภทใหญ่: มรดกและการเข้าถึง

บางอย่างเช่น Java หรือ C ++ คุณได้ประกาศคลาสที่ทำหน้าที่เป็น "พิมพ์เขียว" สำหรับวัตถุที่จะถูกจัดสรรแล้ว คลาสเหล่านี้และวัตถุของพวกเขาไม่สามารถแก้ไขโครงสร้างได้ทันทีที่ยกตัวอย่างเช่น พวกเขาสามารถแทนที่เนื้อหาของพวกเขาในแง่ที่ว่าตัวแปรสามารถเปลี่ยนแปลงได้ แต่โครงสร้างของพวกเขาเป็นแบบคงที่ ตัวอย่างเช่นคุณไม่สามารถเพิ่มวิธีการใหม่ใน HashMap ใน Java คุณสามารถขยายอินเทอร์เฟซ (โดยทั่วไปใช้คลาสที่ให้บริการเป็นสัญญา) หรือสร้างคลาสย่อยเพื่อรับเมธอดหรือตัวแปรเพิ่มเติมที่คุณต้องการพร้อมกับตัวแปรดั้งเดิมและวิธีการของคลาสนั้น ๆ

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

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

การควบคุมการเข้าถึงเป็นจุดสำคัญของความแตกต่างระหว่างภาษาต่าง ๆ

บางภาษาเช่น Java มีตัวดัดแปลงการเข้าถึงที่บังคับใช้อย่างเข้มงวดเช่น "ส่วนตัว" และ "ได้รับการป้องกัน" ซึ่งกำหนดว่าคลาสและคลาสย่อยใดสามารถใช้ตัวแปรหรือวิธีการที่กำหนด

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

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


อาจเป็นเรื่องเทคนิคเล็กน้อยสำหรับคำถามนี้
Zeroth

@zeroth และเจาะจงเกินไป พารามิเตอร์ 'self' (หรือ 'this') อยู่ไกลจากสากล
Javier

@Javier ซึ่งเป็นสาเหตุที่ฉันบอกว่าชัดเจนใน Python และโดยนัยอื่น ๆ
วิศวกรโลก

คำถามเกี่ยวกับการเรียนรู้ OOPและฉันคิดว่าการพูดถึงภาษาที่เขียนเพื่อบรรลุแนวคิดบางอย่างเช่น Encapsulation ที่เรามีprivateสำหรับ Java และขีดล่าง ( __) สำหรับ Python นั้นค่อนข้างสำคัญ ฉันคิดว่าระดับความเป็นนามธรรมของ Python อาจทำให้มันยากขึ้นสำหรับผู้เริ่มต้น แต่ก็เป็นไปไม่ได้แน่นอน Java สะกดมันออกมาสำหรับโปรแกรมเมอร์ซึ่งอาจทำให้แนวคิดบางอย่างติดง่ายขึ้นเล็กน้อย
Derek W

@ WorldEngineer ฉันไม่ได้พูดถึงความชัดเจน / โดยปริยาย (เช่น Python นั้นไม่ใช่เรื่องผิดปกติ) บางภาษาทำการส่ง polymorphic กับพารามิเตอร์ทั้งหมดไม่ใช่เฉพาะในภาษาแรก บางคนใช้คำแนะนำอื่น ๆ สำหรับรุ่นที่ระบุและรูปแบบหลักอาจไม่ได้รับสิทธิ์อาร์กิวเมนต์เป็น 'นี้'
Javier

18

การเรียนรู้หลักการของ OOP นั้นไม่ใช่ภาษาที่เฉพาะเจาะจงเลยดังนั้นถ้าโดย "เรียนรู้ OOP" คุณหมายถึง "เรียนรู้ว่าคำศัพท์หมายถึงอะไร OOP คืออะไรและทำไมฉันถึงต้องการใช้" ภาษานั้นไม่สำคัญ

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

"Python ใหม่มากนั่นคือสาเหตุที่คุณไม่สามารถเรียนรู้ OOP บน Pyton ได้คุณเรียนรู้ Java แล้วเข้าใจ OOP บน Java"

นี่ทำให้ฉันปวดหัว ความผิดมากมายเต็มไปด้วยประโยคเดียว

Python วันที่ 1989

http://python-history.blogspot.com/2009/01/brief-timeline-of-python.html

Java ถึง 1995

http://www.oracle.com/technetwork/java/javase/overview/javahistory-index-198355.html

คุณสามารถสรุปผลของคุณเองตามความถูกต้องของคำแนะนำเล็กน้อยนั้น ...


1
ใช่ แต่ Python 1.0 ไม่ได้จนถึงปี 1994 Java อยู่ในระหว่างการพัฒนาค่อนข้างนานก่อนที่จะวางจำหน่ายเช่นกัน แต่ฉันยอมรับว่า Python มี OO และคุณสามารถเรียนรู้แนวคิดของ OO ได้ มันไร้สาระที่จะพูดเป็นอย่างอื่น
chubbsondubs

2
@chubbsondubs อ๋อยังคงอยู่ต่อหน้า Java! ;)
Izkata

1
เพื่อให้เพียงจุดอ่อน OOP ตามคลาส (C ++, Java, Python และอื่น ๆ อีกมากมาย) นั้นค่อนข้างแตกต่างจาก OOP ที่อิงต้นแบบ (JavaScript เป็นภาษาเดียวที่ฉันรู้ว่าใช้สิ่งนี้) พวกเขายังคงเป็น OOP และมีพื้นฐานเดียวกันและให้บริการเป้าหมายเดียวกันมากมาย แต่ผู้คนจำนวนมากพิจารณาว่าคลาสเป็นส่วนหนึ่งของสิ่งที่พวกเขาพิจารณาว่า OOP ในขณะที่ JavaScript ไม่มีพวกเขาและแน่นอนว่าเป็นวัตถุ
KRyan

@KRyan: ในกรณีที่คุณสนใจมีภาษา OO ต้นแบบที่ใช้ชื่อตัวเอง
Jerry Coffin

ActionScript มีทั้งต้นแบบและคลาส
OrangeDog

8

ฉันคิดว่าคนที่คุณพูดก็แค่แสดงความเป็นคนนิยมภาษา

ในความเป็นจริงมีความแตกต่างระหว่างแนวคิดของ OOP และการใช้ OOP บทกวีนี้จะเข้าใจได้ดีที่สุดเมื่อคุณเข้าใจแนวคิดของ OOP ได้ดีขึ้น

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

ดังนั้นคำถามที่มาถึงจริงๆแล้ว Python จะสอนคุณเกี่ยวกับแนวคิดของ OOP หรือไม่?

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

สิ่งที่คุณต้องจำไว้คือวิธีของ Python ไม่ใช่วิธีเดียวและไม่เป็นวิธีที่ถูกต้องเท่านั้น กระบวนทัศน์การเขียนโปรแกรมมากขึ้นคุณต้นแบบที่ดีกว่าโปรแกรมเมอร์ที่คุณจะกลายเป็น วิธีที่ Python ทำ OOP นั้นไม่ได้เป็นวิธีที่ C ++ หรือ Java ทำได้ แต่แนวคิดก็ถ่ายโอนได้ดี


4
ในแง่ของ OOP นั้น Java และ C ++ นั้นแตกต่างกันมากพอ ๆ กับ Python
Gort the Robot

ในระดับหนึ่ง แต่นั่นเป็นเพราะการเปลี่ยนแปลงความรู้การออกแบบภาษาและข้อ จำกัด ที่แตกต่างกัน
Zeroth

และตรงไปตรงมา 90% ของแนวคิด OOP ถ่ายทอดได้ดีระหว่างพวกเขา
Zeroth

ใช่ฉันเห็นด้วย ฉันคิดว่ามันค่อนข้างตลกที่จะคิดว่า Java และ C ++ เป็น "เหมือนเดิม" ในแง่ของ OOP
Gort the Robot

4

ใช่การใช้งาน OOP นั้นแตกต่างกันมาก ทฤษฏีและหลักการเหมือนกัน แต่มีคนจำนวนมากที่คิดว่า "OOP จริง" เท่านั้นที่ Java และ C ++ ทำคุณได้รับการอ้างอิงมากมายที่ควรจะเป็น "ผู้ไม่เชื่อเรื่องภาษา" แต่ในความเป็นจริงแล้วถือว่าเป็นภาษาคลาส .

ไม่ได้หมายความว่าการอ้างอิงเหล่านั้นไม่ดีหรือ จำกัด ตัวอย่างเช่น "แก๊งของสี่" (GoF) หนังสือ seminal "รูปแบบการออกแบบ: องค์ประกอบของซอฟต์แวร์เชิงวัตถุนำกลับมาใช้" เป็นตัวอย่างที่สำคัญของงานที่ยอดเยี่ยมที่ระบุว่า "OOP" เมื่อมันหมายถึง "OOP คงที่ระดับคลาส"

ในความคิดของฉัน: ใช่คุณสามารถเรียนรู้ OOP ได้มากมายบน Python, Javascript, C และภาษาอื่น ๆ อีกมากมาย แต่บางคน (อาจเป็นนายจ้างในอนาคต) เมื่อถามหา "ประสบการณ์ OOP" หมายถึง Java / C ++ / C # ดังนั้นควรตรวจสอบมุมมองอื่นด้วย

(และสิ่งเหล่านั้นไม่ใช่ 'ประเภท' สองแบบเดียวของ OOP .... )


2
OOP ที่อิงกับการเรียนแบบคงที่แบบแดกดันไม่ใช่สิ่งที่ Alan Key แนะนำไว้ในตอนแรกว่าเป็น OOP แต่จำนวนมากของ "การเรียนรู้" OOP เป็นเรื่องเกี่ยวกับการเรียนรู้การออกแบบ / การเขียนโค้ดที่ไม่ได้ จำกัด อยู่เพียงแค่การดำเนินการของ OOP
Daniel Gratzer

2
มันอาจสมเหตุสมผลที่จะดู CLOS: ฉันไม่คิดว่าหลายภาษา / กรอบงานนำเสนอหลายวิธี
Giorgio

2
@jozefg: ใช่แล้ว Alan Kay เคยพูดว่า "จริงๆแล้วฉันสร้างคำว่า" object-oriented "และฉันสามารถบอกคุณได้ว่าฉันไม่มี C ++ ในใจ"
Javier

1
@Giorgio จริง ๆ แล้ว Dylan อาจให้ CLOS รุ่นที่เรียบง่ายกว่าเล็กน้อย (ไม่มีวิธีระบุเมื่อมีการเรียกใช้มัลติวิธี แต่ง่ายกว่าที่จะเข้าใกล้)
Daniel Gratzer

4

การเขียนโปรแกรมเชิงวัตถุเป็นแนวคิดเกี่ยวกับวิธีการจัดโครงสร้างภาษาการเขียนโปรแกรมเพื่อส่งเสริมการมีเพศสัมพันธ์ต่ำการซ่อนข้อมูล (การห่อหุ้มข้อมูลที่รู้จัก) การรวมข้อมูลและวิธีการที่ทำงานกับข้อมูลนั้นเข้าด้วยกันและการใช้รหัสซ้ำ ภาษาจำนวนมากนำแนวคิดเหล่านี้ไปใช้ดังนั้นจึงมีความแตกต่างระหว่างภาษาเกี่ยวกับวิธีที่พวกเขาเข้าใกล้การวางแนววัตถุ ตัวอย่างเช่น Java อนุญาตให้คลาสขยายคลาส 1 เท่านั้น อย่างไรก็ตาม Python และ C ++ อนุญาตให้คุณขยายคลาสได้ไม่ จำกัด จำนวน Java มีเหตุผลเฉพาะสำหรับข้อ จำกัด ข้อ จำกัด ที่มีไว้เพื่อแก้ไขสิ่งต่าง ๆ จาก C ++ แต่เนื่องจาก Smalltalk รองรับเฉพาะคลาสพื้นฐานเดียวเท่านั้น

ภาษา OO สามารถแบ่งออกเป็นสองตระกูล ตระกูล Smalltalk (หรือ OOP ที่ใช้คลาส) ประกอบด้วยภาษา C ++, Java, Smalltalk, Ruby, C #, Python เพื่อตั้งชื่อไม่กี่ (มีตันในตระกูลนี้) เหล่านี้เป็นการผสมผสานระหว่างภาษาแบบคงที่และแบบไดนามิกและในขณะที่พวกเขาแตกต่างกันเล็กน้อยในแนวคิดบางอย่างพวกเขาจะคล้ายกันมากในวิธีที่พวกเขาคิดเกี่ยวกับ OOP สิ่งที่ฉันหมายถึงคือวิธีที่พวกเขาเข้ามามีส่วนร่วมการห่อหุ้มข้อมูลที่มีผลผูกพันและวิธีการและการใช้รหัสซ้ำและเครื่องมือที่พวกเขาให้คุณทำ ภายในตระกูลนี้มีแนวคิดมากมายเหมือนกัน

ตระกูลอื่นคือ OOP แบบโปรโตปี ภาษาเหล่านี้มีลักษณะแตกต่างกันมากในการใช้งาน OOP ตัวอย่างที่รู้จักกันดีที่สุดอาจเป็น Javascript แต่ Javascript คัดลอกแนวคิดเหล่านี้จาก Scheme และ Object LISP ภาษาเหล่านี้เป็นภาษาที่รู้จักน้อยกว่าและมักจะพิมพ์แบบไดนามิก ฉันไม่สามารถนึกถึงภาษาที่ใช้ต้นแบบต้นแบบที่คงที่ แต่นั่นไม่ได้หมายความว่าไม่มี คุณสามารถอ่านข้อมูลเกี่ยวกับที่นี่: http://en.wikipedia.org/wiki/Prototype-based_programming ประเด็นก็คือพวกเขาเข้าใกล้ OOP ในวิธีที่แตกต่างจากภาษาที่ใช้ในห้องเรียน นั่นหมายความว่าคอนเซ็ปต์ไม่สามารถเคลื่อนย้ายได้ระหว่างสองตระกูลนี้ เพียงเพราะคุณรู้ว่า OO ในครอบครัวหนึ่งไม่ได้หมายความว่าคุณจะเปลี่ยนความคิดเหล่านั้นไปยังครอบครัวอื่นได้อย่างง่ายดาย

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


ฉันจะไม่นับ C ++ ในตระกูล Smalltalk สมอลล์ทอล์คจะขึ้นอยู่กับ Simula และอลันเคย์จงใจละเลยมากที่สุดของการเปลี่ยนแปลงใน Simula-II ในขณะที่ C ++ จะขึ้นอยู่กับว่า C # แปลกมันถูกออกแบบโดยผู้ใช้ C ++ และนักออกแบบ Pascal ให้เป็นเหมือน Java
Jörg W Mittag

1

OOP เป็นหลักการของการเขียนโปรแกรม - เป็นแนวคิดพื้นฐาน การดำเนินการของ OOP แตกต่างกันไปตามภาษาการเขียนโปรแกรม - แต่เสาหลัก (Abstraction, Inheritance, Encapsulation และ Polymorphism) ของ OOP มักจะปรากฏในรูปแบบหรือรูปแบบบางอย่าง

ฉันจะบอกว่าไม่มีการตั้งค่าภาษาใดภาษาหนึ่งโดยที่ Java ผลักความหมายของโปรแกรมเมอร์ให้ยากกว่าการใช้ Python

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

รหัส Java: class Cat extends Animal {}

ชัดเจนขึ้นเล็กน้อยว่าคุณกำลังทำอะไรในมุมมอง OOP ของสิ่งต่าง ๆ มากกว่า:

รหัสหลาม: class Cat(Animal):

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


1

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

เพื่อแสดงสาเหตุของกรณีนี้ให้ดูที่โปรแกรมเริ่มต้นทั่วไปใน Java vs Python มาสร้างเกมทายผลจากล่างที่ง่ายกว่ากัน

ชวา

ใน Java คุณจะเขียนคลาสเกม

public class Game {
    public int secretNumber;
    public int tries;

    public Game(int tries, int secretNumber) {
        this.tries = tries;
        this.secretNumber = secretNumber;
    }

    public void guess(int myNumber) {
        if(myNumber > secretNumber)
            System.out.println("Your guess is too high!");
        else if (myNumber < secretNumber)
            System.out.println("Your guess is too low!");
        else
            System.out.println("You win!!");
        tries = tries - 1;
        if(tries == 0) {
            System.out.println("No more tries: you lose :(");
        }
    }

    public static void main(String[] args) {
        Game game = new Game(10, 47);
        while(true) {
            // how do I read a newline again? Something with BufferedInputStreamReader?
            // how do I convert a String to a number?
        }
    }
}

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

  • วิธีการคงที่
  • การเปิดเผย (สาธารณะและส่วนตัว) คุณควรทำเครื่องหมายฟิลด์ว่าเป็นส่วนตัวเสมอ
  • this. สัญกรณ์สำหรับการอ้างอิงถึงตัวแปรเมื่อพวกเขาถูกหลอกลวงโดยคนอื่น ๆ
  • ตัวสร้างคล้ายกับวิธีการ แต่ไม่ใช่วิธีการ
  • System.outเป็น outputStream และใช่มันคือทุ่งนา แต่เป็นstaticทุ่งนา
  • บางครั้งคุณสามารถละทิ้งวงเล็บปีกกาหากมีเพียงคำสั่งเดียว
  • String[]เป็นอาร์เรย์ มันเป็นวัตถุชนิดพิเศษ แต่กลับมาอีกครั้งไม่ใช่จริง ๆ
  • intเป็นชนิดดั้งเดิม มันเป็นพิเศษ
  • คุณต้องการวิธีเฟรมเวิร์กมากมาย

หลาม

Python เป็น 'บริสุทธิ์' มาก ไม่มีประเภทดั้งเดิม ตัวสร้างไม่มีอยู่มีเพียงวิธีพิเศษที่เรียกว่าเมื่อเริ่มต้น

REPLคุณไม่จำเป็นต้องมีปฏิสัมพันธ์กับคอนโซลที่คุณมี คุณสามารถเล่นเกมโดยใช้g.guess(35)และส่งคืนสตริง

สิ่งนี้ทำให้ภาษาง่ายต่อการเรียนรู้และเข้าใจแนวคิดพื้นฐานของ OOP


0

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

ในขณะที่มีความแตกต่างของการใช้งาน (ตัวอย่างเช่นไพ ธ อนไม่สนับสนุนการมองเห็นเหมือนที่ Java ทำ) และความแตกต่างทางไวยากรณ์ (ใน Javascript, คุณต้องสืบทอดวิธีด้วยตัวเอง), การออกแบบพื้นฐานยังคงเหมือนเดิม

ฉันคิดว่ามันง่ายกว่าที่จะเรียนรู้ OOP ในภาษาอย่าง Java แต่เนื่องจากภาษานั้นต้องการมันและชุมชนก็ไม่ได้เป็นปฏิปักษ์กับมันน้อยไปกว่าชุมชนไพ ธ อน

แต่มีการเขียนมากมายเกี่ยวกับการออกแบบ OOP และการปฏิบัติที่นั่นและการอ่านมันไม่ได้สูญเปล่า แม้ว่าฉันจะเขียนหลาม (ซึ่งมีจำนวนมาก) ฉันก็จะเขียนวัตถุจำนวนมากและฉันก็ใช้วัตถุจำนวนมากจากไลบรารีของบุคคลที่สาม


แนวคิดของรหัสคือการส่งข้อความ ยังไม่มีแหล่งที่มา
ผู้ใช้

1
OOP ไม่เกี่ยวกับคลาส
Jörg W Mittag

1
แนวคิดดั้งเดิมของผู้ใช้ @ Alan Alan นั้นเกี่ยวกับการส่งข้อความ แต่ตั้งแต่นั้นมาการฝึกฝนของ OO ได้พัฒนาไปสู่การออกแบบโดยคำนามหรือคลาสของวัตถุ ตัวอย่างเช่นดร. เคย์ยังเห็นด้วยว่า Java ไม่ได้เป็น Object Oriented เพราะมันไม่รองรับการเชื่อมโยงช้า @ Jorg lol ya ya
Rob

0

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

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

บางคนไม่สามารถทำ OOP ได้หากไม่มีคลาส บางคนต้องฆ่าวัตถุด้วยกระบวนการ

มีแกนกลางของ OOP และแนวคิดดั้งเดิมเกี่ยวกับมัน คุณสามารถดูได้ที่ Smalltalk, Self, Simula, LISP, Newspeak และยังดูประเภทภาษาที่ไม่ใช่ OOP เช่นทุบตีภาษาดาต้าโฟล, APL, J. ลอจิกคนที่ใช้ภาษาโปรล็อก Haskell (คลาสชนิด) พวกเขาทั้งหมดจะสอนความคิดที่แตกต่างและคุณอาจเรียนรู้สิ่งนั้น

  • OOP ไม่ได้เกี่ยวกับภาษาที่จำเป็น
  • OOP ไม่ได้เกี่ยวกับชั้นเรียน

และในที่สุดคุณอาจเห็นสิ่งที่ดีสำหรับ OOP อย่างน้อยคุณจะมีแนวคิดอื่นเกี่ยวกับเรื่องนี้ ผมขอแนะนำให้หาการเจรจาโดยอลันเคย์


หากคุณไม่ได้ดูภาษาที่โพสต์นี้ไร้ประโยชน์

อย่างที่คุณเห็นที่นี่: เราไม่สามารถเห็นด้วยกับสิ่งที่ OOP คือ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.