84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我目前在英国读大一计算机,是个超级菜鸟,我不太明白什么是object oriented。。。中文翻译过来似乎是面向对象(有可能翻译错了)。 我搜索过有关于他的解释,但是还是不是很明白,都解释的太专业了,请问又问能够很简单明了并且完整的给我解释一下什么是object oriented么? 谢谢大家了
我们在看待现实世界的问题时,会发现任何一个事物有自身的属性,标志了TA是什么,还有这个事物的行为,用来和其他事物进行交互。面向对象就是这么一种思想,建模时,将问题抽象成很多对象。通过对象之间的交互将问题解决。
面向对象的优点主要在两个方面:
我们日常生活的思维模式也是面向对象的,我们常常会说,谁谁谁能做什么,给TA相应的需求,TA就是个对象。在需求分析时,比较容易建模。
程序实现之后,具有比较好的可维护性,可重用性和可扩展性。因为对象是独立的,所以A项目中用TA可以,B项目也可以用TA,我们也可以通过继承来对对象进行扩展改变。因为对象是封装的,所以除非接口发生变化,否则对象内部实现的变化并不会影响与外部的交互。
object oriented,面向對象,簡單來說,是一種編程的套路。
編程(programing),就是利用已有的信息產生新的信息。
具體來說,我們首先將已有的信息轉化成數據(Data),然後通過操作這些數據,得出新的數據,新的數據就包含了新的信息。操作這些數據的方法,我們稱之爲函數(Function)。
從這個角度來說,程序(program)就是一堆數據和函數,編程就是設計和組織數據和函數。
不同的設計和組織的方式,就叫做編程的套路,或者說,範式(paradigm)。其中,面向對象就是範式之一。
面向對象的核心,就是將某些數據和用於操作這些數據的函數封裝(encapsulate)在一起。
被封裝進對象的函數,稱爲該對象的方法(method)。
因爲數據和函數都被封裝進對象了,所以當我們需要操作某些數據的時候,我們就向相應的對象傳遞一個消息(pass a message),要求這個對象返回我們需要的答案。對象收到消息後,調用封裝在自身內部的方法,計算出答案,然後回傳給我們一個包含答案的消息。
以上就是「面向對象」的基本原理。
「面向對象」的好處把數據和相應的函數封裝在一起,達到界面和實現的分離。這樣的話,下層的改動不會影響上層。我們前面已經說了,對象內部的方法,本質上是函數,這個函數的定義,我們稱爲方法的實現。只要這個方法對外提供的接口沒有變,那麼對對象內部的方法的實現(也就是函數定義)的改變,不會影響程序的其他部分。
當然,面向對象也有壞處。最突出的是,如果一味強調「一切都是對象」,強迫所有的編程都按照面向對象的套路來,完全不允許其他套路,就會導致一些繁瑣的設計。
理解了基本原理,再理解其他概念就容易了。
如果有一些對象是相似的,那麼相應地,操作它們的函數(方法)應該也是相似的。這時如何共享方法,避免重複?
一種思路是引入類(class)這個概念,就是將相似的對象都作爲一類。然後類也是對象,也有綁定的函數或者方法。這些類的方法,可以被屬於該類的對象們共享。同理,相似的類,還可以歸到更大的類去。這就形成了父類和子類的概念。子類可以繼承父類的方法,同理,可以繼承爺爺類(父類的父類)的方法。
上面是單線的繼承,就是說一個類只能從自己的祖先那裏繼承方法。這有時不方便。一種思路是允許一個類有多個父類,這是多重繼承。另一種思路是允許類從其他類借用方法,這是mixin。
和類相對的思路,是引入原型(prototype)的概念。如果A對象和B對象相似,用類來處理,那就是構造一個類C,然後將A和B作爲類C的兩個實例。如果用原型來處理,那就是以A作爲原型,構造一個B。
在這兩條思路的基礎上,又形成了更多的概念,以及相應的一些編程的慣例,這裏就不介紹了。
至於具體的編程語言,是否提供機制可以實現面向對象編程,是否原生支持面向對象,以何種方式支持,是否只支持面向對象編程,那是另一個問題。
继续抛砖引玉……
就是面向对象的意思。区别于面向过程等编程模式。可以参看百度百科
可以参看Head First Java/Head First C#
面向对象,复杂而准确的说法相信你应该已经看到过了,我就不贴维基百科的链接了。它是一种编程范式。
简单地说,就是你先想好系统里有哪些对象,它们有哪些数据和行为。比如你做个问答网站,那么「问题」就是一个类,「问题」会有「标题」、「描述」等数据,「回答」、「删除」、「关闭」、「顶」、「踩」、「修改」等行为可以在它的实例身边发生。围绕这个基本思路开展的编程活动就叫做「面向对象程序设计」。
当然,面向对象的内容远不止这么多。比如继承啦、重载啦、多态啦等等。
PS: 台湾地区叫「物件導向」。
什么是面向对象?
我们在看待现实世界的问题时,会发现任何一个事物有自身的属性,标志了TA是什么,还有这个事物的行为,用来和其他事物进行交互。
面向对象就是这么一种思想,建模时,将问题抽象成很多对象。通过对象之间的交互将问题解决。
为什么要面向对象?
面向对象的优点主要在两个方面:
我们日常生活的思维模式也是面向对象的,我们常常会说,谁谁谁能做什么,给TA相应的需求,TA就是个对象。在需求分析时,比较容易建模。
程序实现之后,具有比较好的可维护性,可重用性和可扩展性。
因为对象是独立的,所以A项目中用TA可以,B项目也可以用TA,我们也可以通过继承来对对象进行扩展改变。
因为对象是封装的,所以除非接口发生变化,否则对象内部实现的变化并不会影响与外部的交互。
怎么学习面向对象?
object oriented,面向對象,簡單來說,是一種編程的套路。
什麼是編程的套路
編程(programing),就是利用已有的信息產生新的信息。
具體來說,我們首先將已有的信息轉化成數據(Data),然後通過操作這些數據,得出新的數據,新的數據就包含了新的信息。操作這些數據的方法,我們稱之爲函數(Function)。
從這個角度來說,程序(program)就是一堆數據和函數,編程就是設計和組織數據和函數。
不同的設計和組織的方式,就叫做編程的套路,或者說,範式(paradigm)。其中,面向對象就是範式之一。
面向對象的基本原理
面向對象的核心,就是將某些數據和用於操作這些數據的函數封裝(encapsulate)在一起。
被封裝進對象的函數,稱爲該對象的方法(method)。
因爲數據和函數都被封裝進對象了,所以當我們需要操作某些數據的時候,我們就向相應的對象傳遞一個消息(pass a message),要求這個對象返回我們需要的答案。對象收到消息後,調用封裝在自身內部的方法,計算出答案,然後回傳給我們一個包含答案的消息。
以上就是「面向對象」的基本原理。
面向對象的好處
「面向對象」的好處把數據和相應的函數封裝在一起,達到界面和實現的分離。這樣的話,下層的改動不會影響上層。我們前面已經說了,對象內部的方法,本質上是函數,這個函數的定義,我們稱爲方法的實現。只要這個方法對外提供的接口沒有變,那麼對對象內部的方法的實現(也就是函數定義)的改變,不會影響程序的其他部分。
當然,面向對象也有壞處。最突出的是,如果一味強調「一切都是對象」,強迫所有的編程都按照面向對象的套路來,完全不允許其他套路,就會導致一些繁瑣的設計。
面向對象的其他概念
理解了基本原理,再理解其他概念就容易了。
如果有一些對象是相似的,那麼相應地,操作它們的函數(方法)應該也是相似的。這時如何共享方法,避免重複?
一種思路是引入類(class)這個概念,就是將相似的對象都作爲一類。然後類也是對象,也有綁定的函數或者方法。這些類的方法,可以被屬於該類的對象們共享。同理,相似的類,還可以歸到更大的類去。這就形成了父類和子類的概念。子類可以繼承父類的方法,同理,可以繼承爺爺類(父類的父類)的方法。
上面是單線的繼承,就是說一個類只能從自己的祖先那裏繼承方法。這有時不方便。一種思路是允許一個類有多個父類,這是多重繼承。另一種思路是允許類從其他類借用方法,這是mixin。
和類相對的思路,是引入原型(prototype)的概念。如果A對象和B對象相似,用類來處理,那就是構造一個類C,然後將A和B作爲類C的兩個實例。如果用原型來處理,那就是以A作爲原型,構造一個B。
在這兩條思路的基礎上,又形成了更多的概念,以及相應的一些編程的慣例,這裏就不介紹了。
至於具體的編程語言,是否提供機制可以實現面向對象編程,是否原生支持面向對象,以何種方式支持,是否只支持面向對象編程,那是另一個問題。
继续抛砖引玉……
就是面向对象的意思。区别于面向过程等编程模式。可以参看百度百科
可以参看Head First Java/Head First C#
面向对象,复杂而准确的说法相信你应该已经看到过了,我就不贴维基百科的链接了。它是一种编程范式。
简单地说,就是你先想好系统里有哪些对象,它们有哪些数据和行为。比如你做个问答网站,那么「问题」就是一个类,「问题」会有「标题」、「描述」等数据,「回答」、「删除」、「关闭」、「顶」、「踩」、「修改」等行为可以在它的实例身边发生。围绕这个基本思路开展的编程活动就叫做「面向对象程序设计」。
当然,面向对象的内容远不止这么多。比如继承啦、重载啦、多态啦等等。
PS: 台湾地区叫「物件導向」。