面向对象,面向过程编程
很多時(shí)候,我們都是用面向?qū)ο笳Z言進(jìn)行面向過程編碼。
? ? 1. 濫用 getter、setter 方法。
? ? ? 濫用getter,setter方法很容易造成違反封裝特性。數(shù)據(jù)沒有訪問權(quán)限控制,任何代碼都可以隨意修改它,代碼就退化成了面向過程編程風(fēng)格的了。
? ? ?在設(shè)計(jì)實(shí)現(xiàn)類的時(shí)候,除非真的需要,否則,盡量不要給屬性定義 setter 方法。除此之外,盡管 getter 方法相對 setter 方法要安全些,但是如果返回的是集合容器(比如例子中的 List 容器),也要防范集合內(nèi)部數(shù)據(jù)被修改的危險(xiǎn)。
? 2. 濫用全局變量和全局方法
? 在面向?qū)ο缶幊讨?#xff0c;常見的全局變量有單例類對象、靜態(tài)成員變量、常量等,常見的全局方法有靜態(tài)方法。單例類對象在全局代碼中只有一份,所以,它相當(dāng)于一個(gè)全局變量。靜態(tài)方法一般用來操作靜態(tài)變量或者外部數(shù)據(jù)。靜態(tài)方法將方法與數(shù)據(jù)分離,破壞了封裝特性,是典型的面向過程風(fēng)格。
? ? ? ? 實(shí)際上,只包含靜態(tài)方法不包含任何屬性的 Utils 類,是徹徹底底的面向過程的編程風(fēng)格。但這并不是說,我們就要杜絕使用 Utils 類了。
3.定義數(shù)據(jù)和方法分離的類
? 也就是數(shù)據(jù)定義在一個(gè)類中,方法定義在另一個(gè)類中。
?
??
?
? ? 在生活中,你去完成一個(gè)任務(wù),你一般都會(huì)思考,應(yīng)該先做什么、后做什么,如何一步一步地順序執(zhí)行一系列操作,最后完成整個(gè)任務(wù)。面向過程編程風(fēng)格恰恰符合人的這種流程化思維方式。而面向?qū)ο缶幊田L(fēng)格正好相反。它是一種自底向上的思考方式。它不是先去按照執(zhí)行流程來分解任務(wù),而是將任務(wù)翻譯成一個(gè)一個(gè)的小的模塊(也就是類),設(shè)計(jì)類之間的交互,最后按照流程將類組裝起來,完成整個(gè)任務(wù)。我們在上一節(jié)課講到了,這樣的思考路徑比較適合復(fù)雜程序的開發(fā),但并不是特別符合人類的思考習(xí)慣。
??面向?qū)ο缶幊屉x不開基礎(chǔ)的面向過程編程。為什么這么說?我們仔細(xì)想想,類中每個(gè)方法的實(shí)現(xiàn)邏輯,不就是面向過程風(fēng)格的代碼嗎?
?
? ?
總結(jié)
以上是生活随笔為你收集整理的面向对象,面向过程编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 封装,抽象,继承,多态
- 下一篇: 抽象类,接口