L*********s 发帖数: 3063 | 1 如果setter只是用来给属性赋值,那么确实没必要弄setter和getter,
但是随着业务逻辑的发展,或者设计的变动,
往往我们要求在给属性赋值的同时还要干一些其他事情。
也许你辛辛苦苦写下了一百多行给某个public属性赋值的语句后,
忽然你的manager或客户要求你在给那个属性赋值的同时一定要synchronized()什么东
西,
这时你就必须在每个赋值的地方进行改动。
如果你当初只用setter,那么只要修改一下setter就可以了。
同时为了让你的合作者们使用这个类时也只用setter,就得把属性设为private,
然后就读数值就得用getter.
也许哪天你的客户要求关于这个属性的transaction都跟某个新建的网页同步,
或者要求跟某个新建的数据库同步,或者要求这个属性的值一旦变化便立即触发某个新
定义的事件。
这时你就必须添加无数的代码。
如果你当初用了getter和setter,事情就超级简单了, 基本不用改代码! 只需用鼠标设置
javabean, 然后所有的脏活累活container都自动帮你解决. |
d****i 发帖数: 4809 | 2 学过C++的人应该十分明白这个道理,这个正是C++要求封装的原因。Java的setter和
getter和C++的数据封装原理是一样的。
【在 L*********s 的大作中提到】 : 如果setter只是用来给属性赋值,那么确实没必要弄setter和getter, : 但是随着业务逻辑的发展,或者设计的变动, : 往往我们要求在给属性赋值的同时还要干一些其他事情。 : 也许你辛辛苦苦写下了一百多行给某个public属性赋值的语句后, : 忽然你的manager或客户要求你在给那个属性赋值的同时一定要synchronized()什么东 : 西, : 这时你就必须在每个赋值的地方进行改动。 : 如果你当初只用setter,那么只要修改一下setter就可以了。 : 同时为了让你的合作者们使用这个类时也只用setter,就得把属性设为private, : 然后就读数值就得用getter.
|
m*******l 发帖数: 12782 | 3 大部分学Java的都是知其然而不知其所以然
学C++的,如果不知其所以然,很难混下去...
【在 d****i 的大作中提到】 : 学过C++的人应该十分明白这个道理,这个正是C++要求封装的原因。Java的setter和 : getter和C++的数据封装原理是一样的。
|
d****i 发帖数: 4809 | 4 所以我一直提倡从C-> C++ ->Java这么一条学习线路学下去,这样对很多问题的理解比
较透彻,概念也比较深入清晰。虽然花的时间会多一些。
【在 m*******l 的大作中提到】 : 大部分学Java的都是知其然而不知其所以然 : 学C++的,如果不知其所以然,很难混下去...
|
k******i 发帖数: 5774 | 5 都是面向对象设计的一些原则
SOLID里面的一条吧
么东
【在 d****i 的大作中提到】 : 学过C++的人应该十分明白这个道理,这个正是C++要求封装的原因。Java的setter和 : getter和C++的数据封装原理是一样的。
|
g*****g 发帖数: 34805 | 6 你咋不说学C++的懂Design Pattern的实在不多,本版很少讨论这个。有些人成天还沉
迷于回
字怎么写呢?
【在 m*******l 的大作中提到】 : 大部分学Java的都是知其然而不知其所以然 : 学C++的,如果不知其所以然,很难混下去...
|
m*******l 发帖数: 12782 | 7 连object这个基类都不知道的java程序员,连基本oop都搞不懂的大谈什么
Design pattern
不好笑么?
【在 g*****g 的大作中提到】 : 你咋不说学C++的懂Design Pattern的实在不多,本版很少讨论这个。有些人成天还沉 : 迷于回 : 字怎么写呢?
|
a9 发帖数: 21638 | 8 好虫最近比较露窃啊。
OO跟design pattern是两回事儿。
还沉
【在 m*******l 的大作中提到】 : 连object这个基类都不知道的java程序员,连基本oop都搞不懂的大谈什么 : Design pattern : 不好笑么?
|
p**o 发帖数: 3409 | 9 在灵活一些的动态语言比如python里,推荐的做法是直接修改类成员属性,如果哪天需
求复杂化了,再通过@property修饰一层实现更复杂的封装,但是客户代码完全不必改
动,没有“必须在每个赋值的地方进行改动”这个问题。在Java里常写getters/
setters大概是Java语言本身的限制。我不太清楚其他的静态编译语言的最佳实践里是
否包含getters/setters。
【在 L*********s 的大作中提到】 : 如果setter只是用来给属性赋值,那么确实没必要弄setter和getter, : 但是随着业务逻辑的发展,或者设计的变动, : 往往我们要求在给属性赋值的同时还要干一些其他事情。 : 也许你辛辛苦苦写下了一百多行给某个public属性赋值的语句后, : 忽然你的manager或客户要求你在给那个属性赋值的同时一定要synchronized()什么东 : 西, : 这时你就必须在每个赋值的地方进行改动。 : 如果你当初只用setter,那么只要修改一下setter就可以了。 : 同时为了让你的合作者们使用这个类时也只用setter,就得把属性设为private, : 然后就读数值就得用getter.
|
d****i 发帖数: 4809 | 10 这回好虫你还真说错了,design pattern最著名的经典的教科书:
Design Patterns: Elements of Reusable Object-Oriented Software
By Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Addison-Wesley,1994
就是全部用C++做例子的,当然可能跟那时Java还没有诞生有关。这本书几乎就是
design pattern的bible了吧。
【在 g*****g 的大作中提到】 : 你咋不说学C++的懂Design Pattern的实在不多,本版很少讨论这个。有些人成天还沉 : 迷于回 : 字怎么写呢?
|
|
|
S**I 发帖数: 15689 | 11 design pattern的经典用C++和很多C++程序员不懂design pattern不矛盾。
【在 d****i 的大作中提到】 : 这回好虫你还真说错了,design pattern最著名的经典的教科书: : Design Patterns: Elements of Reusable Object-Oriented Software : By Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides : Addison-Wesley,1994 : 就是全部用C++做例子的,当然可能跟那时Java还没有诞生有关。这本书几乎就是 : design pattern的bible了吧。
|
d****i 发帖数: 4809 | 12 这个倒是,很多C++程序员对于design pattern也都是一头雾水,不过那本书上的例子
的程序写的都很精美的说,看过以后让人拍案叫好。
【在 S**I 的大作中提到】 : design pattern的经典用C++和很多C++程序员不懂design pattern不矛盾。
|
d*****b 发帖数: 9 | 13 "也许你辛辛苦苦写下了一百多行给某个public属性赋值的语句后,
忽然你的manager或客户要求你在给那个属性赋值的同时一定要synchronized()什么东
西,这时你就必须在每个赋值的地方进行改动。"
这个概率对于大多数人来说也太低了吧...要是因此给每一个public属性都加上setter
和getter,是否感觉有点儿累.
该不该加,我认为还是应该具体问题具体分析. |
x****u 发帖数: 44466 | 14 这个DP容易把菜鸟引入over design的坑里去。
【在 d****i 的大作中提到】 : 这个倒是,很多C++程序员对于design pattern也都是一头雾水,不过那本书上的例子 : 的程序写的都很精美的说,看过以后让人拍案叫好。
|
a9 发帖数: 21638 | 15 我比较货币于用public变量,需要重构的时候用IDE改成get set很方便。
setter
【在 d*****b 的大作中提到】 : "也许你辛辛苦苦写下了一百多行给某个public属性赋值的语句后, : 忽然你的manager或客户要求你在给那个属性赋值的同时一定要synchronized()什么东 : 西,这时你就必须在每个赋值的地方进行改动。" : 这个概率对于大多数人来说也太低了吧...要是因此给每一个public属性都加上setter : 和getter,是否感觉有点儿累. : 该不该加,我认为还是应该具体问题具体分析.
|
z*******3 发帖数: 13709 | 16 gof那些pattern大部分其实都被java的各种框架什么轻松搞定了
比如singleton,一个@singleton就搞定了
或者用enum,现在很少还有人去自己实现singleton了
还有prototype也是写下配置文件就好了,或者直接调用clone()方法
factory的功能则多数spring所取代,flyweight等模式则在ejb容器中被实现
还有一些行为模式,比如iterator之类的都有现成的实现类,aop对应visitor什么
也都是用就行了,对于一般java开发人员来说,不需要自己去写这些模式
只需要会用就行了,如果经常自己去实现gof的那些模式
反倒是要看看是为什么了,为什么这个人在重复造轮子
而后在gof的基础之上,sun又搞出了一个j2ee core pattern
这个才是真正常见的对于java开发人员来说的design pattern
而就是这个core pattern,现在看也都有些陈旧了
【在 d****i 的大作中提到】 : 这回好虫你还真说错了,design pattern最著名的经典的教科书: : Design Patterns: Elements of Reusable Object-Oriented Software : By Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides : Addison-Wesley,1994 : 就是全部用C++做例子的,当然可能跟那时Java还没有诞生有关。这本书几乎就是 : design pattern的bible了吧。
|
z*******3 发帖数: 13709 | 17 并发需要synchronized的地方会低?
随便一个server都会遇到类似的问题啊
难倒有server是单线程的?
setter
【在 d*****b 的大作中提到】 : "也许你辛辛苦苦写下了一百多行给某个public属性赋值的语句后, : 忽然你的manager或客户要求你在给那个属性赋值的同时一定要synchronized()什么东 : 西,这时你就必须在每个赋值的地方进行改动。" : 这个概率对于大多数人来说也太低了吧...要是因此给每一个public属性都加上setter : 和getter,是否感觉有点儿累. : 该不该加,我认为还是应该具体问题具体分析.
|
z*******3 发帖数: 13709 | 18 set/get一个很重要常见的应用就是aop等拦截器需要嘛
要拦截对于某一个bean的属性的调用
直接拦截其get方法就行了
如果分散在其它方法里
那怎么拦截?
最常见的就是log的生成
不拦截每次都去写一个log方法?
还有如果不拦截的话,对于一些现有的jar包里面的类的使用
就无法改了,要拆开来后重写代码
如果没有代码的话,还需要先反编译,再写,再编译
麻烦得多 |
d*****b 发帖数: 9 | 19 "并发需要synchronized的地方会低?"
您这不叫断章取义吗? 原文是
""也许你辛辛苦苦写下了一百多行给某个public属性赋值的语句后,
东西,这时你就必须在每个赋值的地方进行改动。" |
z*******3 发帖数: 13709 | 20 不是,我在给你新例子
比楼主说的这个极端情况要广泛得多,几乎所有得server都会遇到
就是dto模式,如何防止多个线程并发修改同一个数据源的问题
这个太常见了,是个server就会用到,我前几天还在同步我自己的数据源
加上并发修改异常处理才大概算搞定
【在 d*****b 的大作中提到】 : "并发需要synchronized的地方会低?" : 您这不叫断章取义吗? 原文是 : ""也许你辛辛苦苦写下了一百多行给某个public属性赋值的语句后, : 东西,这时你就必须在每个赋值的地方进行改动。"
|
|
|
z*******3 发帖数: 13709 | 21 另外关于直接变量的修改
这个你没有办法利用上接口
接口不定义变量,只定义方法
这样可以剥离耦合
比如a.int = b.int
那么这个时候你要连同B一起编译
而这个B只能是具体的实现类
这样耦合度明显增加
A和B的实现就很难拆开给两个人去写
因为A的编译需要用到B类,否则无法编译
而如果B是一个接口
那么a.int = b.getInt();
的话,A的编译只需要拿到B的接口就行了
B的实现跟A的实现分离
这也是最基本的分工的要求
否则你写的代码要等隔壁阿三写好才能编译
那就痛苦了 |
a9 发帖数: 21638 | 22 说实话,需要后加syncronized的情况非常少。
一个操作需不需要同步,应该在写这个方法的时候就应该考虑好。
么东
【在 z*******3 的大作中提到】 : 并发需要synchronized的地方会低? : 随便一个server都会遇到类似的问题啊 : 难倒有server是单线程的? : : setter
|
z*******3 发帖数: 13709 | 23 我不是在说复用的service bean
是entity bean
这个需要syncrhonized的情况太多了
复用的service bean也不是不需要synchronized
当写core java的时候遇到的就多了
大多数时候被写好的server给解决了而已
【在 a9 的大作中提到】 : 说实话,需要后加syncronized的情况非常少。 : 一个操作需不需要同步,应该在写这个方法的时候就应该考虑好。 : : 么东
|
d*****b 发帖数: 9 | 24 抱歉.刚才没看出你是用反问的语句形式举个新例子.不过显然你的例子更常见.
基本上我的理解就是:当你给那个属性赋值的同时还一定要干点儿其它事时,用setter把
它们放一块.没这需要时就别用. |
z*******3 发帖数: 13709 | 25 set用得其实少,get用得多
但是往往set需要synchronized
只不过现在hibernate什么都做得很好
以至于越来越少人真的去自己倒腾了
如果不synchronized的话
那么各个层面之间的entity bean的数据一致性就值得商榷了
这个时候会涉及hashcode的问题
如何保证两个不同的物理对象其实代表的是一个东西
就要用hashcode来解决冲突
【在 d*****b 的大作中提到】 : 抱歉.刚才没看出你是用反问的语句形式举个新例子.不过显然你的例子更常见. : 基本上我的理解就是:当你给那个属性赋值的同时还一定要干点儿其它事时,用setter把 : 它们放一块.没这需要时就别用.
|
a9 发帖数: 21638 | 26 可能咱们做的业务不同,我这儿基本上用同步很少,需要有同步的地方,基本都需要数
据库锁来实现。因为只要同步,就不只是一台服务器上同步,所有的服务器都需要保持
同步。
setter把
【在 z*******3 的大作中提到】 : set用得其实少,get用得多 : 但是往往set需要synchronized : 只不过现在hibernate什么都做得很好 : 以至于越来越少人真的去自己倒腾了 : 如果不synchronized的话 : 那么各个层面之间的entity bean的数据一致性就值得商榷了 : 这个时候会涉及hashcode的问题 : 如何保证两个不同的物理对象其实代表的是一个东西 : 就要用hashcode来解决冲突
|
z*******3 发帖数: 13709 | 27 那就是把这种并发的问题压给db去做了
这种方式就是之前一直批判的方式
db的负担已经很重了,大多数时候都是db有瓶颈问题
所以同步并发锁这种问题应该让hibernate这种东西来解决
而不是把问题推给db,所有逻辑都应该压给java去做,而不是db
这个基本概念其实很多搞java的人不理解
这就聊到了我之前举的常见例子
用hibernate有什么好处?
这个话题每隔那么一段时间,就会在java版那边讨论一遍
可以考考古,看看以前其他人是怎么说的
【在 a9 的大作中提到】 : 可能咱们做的业务不同,我这儿基本上用同步很少,需要有同步的地方,基本都需要数 : 据库锁来实现。因为只要同步,就不只是一台服务器上同步,所有的服务器都需要保持 : 同步。 : : setter把
|
a9 发帖数: 21638 | 28 貌似这种锁即使用hibernate,也是要申请数据库上的锁。
我不是搞java的,把c#的经验拿过来随便一说,放了一下狗扫了一眼hibernate而已。
说的不对的地方请见谅。
要数
保持
【在 z*******3 的大作中提到】 : 那就是把这种并发的问题压给db去做了 : 这种方式就是之前一直批判的方式 : db的负担已经很重了,大多数时候都是db有瓶颈问题 : 所以同步并发锁这种问题应该让hibernate这种东西来解决 : 而不是把问题推给db,所有逻辑都应该压给java去做,而不是db : 这个基本概念其实很多搞java的人不理解 : 这就聊到了我之前举的常见例子 : 用hibernate有什么好处? : 这个话题每隔那么一段时间,就会在java版那边讨论一遍 : 可以考考古,看看以前其他人是怎么说的
|
z*******3 发帖数: 13709 | 29 有可能
这是防止多个线程同时并发修改一个对象
我说得不够准确,hibernate是针对数据库的东西
如果没有数据库的话,也还是需要其它东西来控制并发操作
比如appengine,就用抛出异常来控制并发修改同一个东西
其中一个线程修改正确返回,然后另外一个抛出异常这样
不同的环境可能遇到的情况是不同的
【在 a9 的大作中提到】 : 貌似这种锁即使用hibernate,也是要申请数据库上的锁。 : 我不是搞java的,把c#的经验拿过来随便一说,放了一下狗扫了一眼hibernate而已。 : 说的不对的地方请见谅。 : : 要数 : 保持
|
z*******3 发帖数: 13709 | 30 hibernate不仅仅控制存入的对象
还控制读取出来的对象
还会建立cache,以保存一定的object pool以提升效率
优化一个常见的手段就是减少层与层之间的io操作
那么这个pool里面的object保证唯一性的方式就很多了
但是即便如此,synchronized还是不够用
每一个entity还是要重载hashcode方法
【在 a9 的大作中提到】 : 貌似这种锁即使用hibernate,也是要申请数据库上的锁。 : 我不是搞java的,把c#的经验拿过来随便一说,放了一下狗扫了一眼hibernate而已。 : 说的不对的地方请见谅。 : : 要数 : 保持
|
|
|
g*****g 发帖数: 34805 | 31 你是想说我老不知道Object这个基类?你是来搞笑的吗?
【在 m*******l 的大作中提到】 : 连object这个基类都不知道的java程序员,连基本oop都搞不懂的大谈什么 : Design pattern : 不好笑么?
|
g*****g 发帖数: 34805 | 32 你阅读能力有问题吗?我老哪句话说了OO跟design pattern是一回事?
【在 a9 的大作中提到】 : 好虫最近比较露窃啊。 : OO跟design pattern是两回事儿。 : : 还沉
|
g*****g 发帖数: 34805 | 33 Python这么做是可以的,一些静态语言,如Scala,不允许field跟method重名。同样可
以写public field,而在需要的时候把field的访问改成方法而不不要改动接口。但
Java和C++这些传统的静态语言不行。
【在 p**o 的大作中提到】 : 在灵活一些的动态语言比如python里,推荐的做法是直接修改类成员属性,如果哪天需 : 求复杂化了,再通过@property修饰一层实现更复杂的封装,但是客户代码完全不必改 : 动,没有“必须在每个赋值的地方进行改动”这个问题。在Java里常写getters/ : setters大概是Java语言本身的限制。我不太清楚其他的静态编译语言的最佳实践里是 : 否包含getters/setters。
|
g*****g 发帖数: 34805 | 34 所以说你没写过public API。你重构自己的代码容易,重构别人的代码可难。
【在 a9 的大作中提到】 : 我比较货币于用public变量,需要重构的时候用IDE改成get set很方便。 : : setter
|
d**********x 发帖数: 4083 | 35 C++程序员不懂design pattern?拜托你回去看看Design Pattern这本书是用什么语言讲
解的行么?
C++程序员整天研究回字几种写法?是,但是是什么目的?举个极端例子,MCD那一套让
人眼花缭乱的奇技淫巧,是用来做什么的?很多人根本就没仔细看过MCD的副标题:
Generic Programming and Design Patterns Applied
很多人不是不懂,只是不说。很多小孩子看到了,觉得自己懂,就很大声的说出来。这
没什么不好,不过以为不说的人不懂,就太那个了。
【在 g*****g 的大作中提到】 : 你阅读能力有问题吗?我老哪句话说了OO跟design pattern是一回事?
|
g*****g 发帖数: 34805 | 36 OO design pattern可以用任何OO语言写。但用什么写的跟大多数C++程序员懂不懂是是
俩回事。本版的大多数C++程序员还沉迷于回字几种写法,看看大多数讨论的问题就知
道了。
讨论设计模式,系统架构的问题平均一个月能有一次?就这某些ID还看不起Java程序员
实在搞笑。
【在 d**********x 的大作中提到】 : C++程序员不懂design pattern?拜托你回去看看Design Pattern这本书是用什么语言讲 : 解的行么? : C++程序员整天研究回字几种写法?是,但是是什么目的?举个极端例子,MCD那一套让 : 人眼花缭乱的奇技淫巧,是用来做什么的?很多人根本就没仔细看过MCD的副标题: : Generic Programming and Design Patterns Applied : 很多人不是不懂,只是不说。很多小孩子看到了,觉得自己懂,就很大声的说出来。这 : 没什么不好,不过以为不说的人不懂,就太那个了。
|
m*******l 发帖数: 12782 | 37 前面有人不知道.自己考古
【在 g*****g 的大作中提到】 : 你是想说我老不知道Object这个基类?你是来搞笑的吗?
|
g*****g 发帖数: 34805 | 38 有一个不知道你就代表大多数了?
【在 m*******l 的大作中提到】 : 前面有人不知道.自己考古
|
m*******l 发帖数: 12782 | 39 还本版大多数C++程序员...
你统计过没有?
谁是C++程序员?
【在 g*****g 的大作中提到】 : OO design pattern可以用任何OO语言写。但用什么写的跟大多数C++程序员懂不懂是是 : 俩回事。本版的大多数C++程序员还沉迷于回字几种写法,看看大多数讨论的问题就知 : 道了。 : 讨论设计模式,系统架构的问题平均一个月能有一次?就这某些ID还看不起Java程序员 : 实在搞笑。
|
m*******l 发帖数: 12782 | 40 我说代表大多数了?
【在 g*****g 的大作中提到】 : 有一个不知道你就代表大多数了?
|
|
|
g*****g 发帖数: 34805 | 41 我老看看板上的帖子还算有依据。总比你靠谱多了,难道你还能统计了大多数学Java的?
发信人: moneybull (moneybull), 信区: Programming
标 题: Re: 为什么java要用setter和getter
发信站: BBS 未名空间站 (Tue Dec 18 09:56:11 2012, 美东)
大部分学Java的都是知其然而不知其所以然
学C++的,如果不知其所以然,很难混下去...
【在 d****i 的大作中提到】 : 学过C++的人应该十分明白这个道理,这个正是C++要求封装的原因。Java的setter和 : getter和C++的数据封装原理是一样的。
|
d**********x 发帖数: 4083 | 42 Programming版现在就很冷清,除了吵架的看不到什么有营养的讨论
这版又没顶个名字叫CPlusPlus,你凭啥用这个版的讨论来代表C++程序员?莫非全天下
除了java程序员就是c++程序员,全天下所有的程序员都上mitbbs,所以他们没在java
版出现肯定就是c++程序员?
言讲
套让
。这
【在 g*****g 的大作中提到】 : OO design pattern可以用任何OO语言写。但用什么写的跟大多数C++程序员懂不懂是是 : 俩回事。本版的大多数C++程序员还沉迷于回字几种写法,看看大多数讨论的问题就知 : 道了。 : 讨论设计模式,系统架构的问题平均一个月能有一次?就这某些ID还看不起Java程序员 : 实在搞笑。
|
g*****g 发帖数: 34805 | 43 LOL,你看看谁挑起的呗,我老不过是还治其人之身而已。
我老就不明白,indeed工资摆在那里,为嘛总有写C++自觉高人一等。
java
【在 d**********x 的大作中提到】 : Programming版现在就很冷清,除了吵架的看不到什么有营养的讨论 : 这版又没顶个名字叫CPlusPlus,你凭啥用这个版的讨论来代表C++程序员?莫非全天下 : 除了java程序员就是c++程序员,全天下所有的程序员都上mitbbs,所以他们没在java : 版出现肯定就是c++程序员? : : 言讲 : 套让 : 。这
|
d**********x 发帖数: 4083 | 44 貌似facebook工资也不低啊,google工资也不低啊。。。比工资有啥意思?
当然我承认,C++造就了一大批高不成低不就还自我感觉良好的程序员,Linus骂得好
天下
【在 g*****g 的大作中提到】 : LOL,你看看谁挑起的呗,我老不过是还治其人之身而已。 : 我老就不明白,indeed工资摆在那里,为嘛总有写C++自觉高人一等。 : : java
|
g******y 发帖数: 1101 | 45 这个原因肯定是不对的。我们把这叫hidden logic,如果你必须这么干,只能说明你的
design有问题,很可惜竟然从来没有人给楼主指出过。 |
g*****g 发帖数: 34805 | 46 http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_pro
Hiding the internals of the object protects its integrity by preventing
users from setting the internal data of the component into an invalid or
inconsistent state
invalid => you may add additional validation code in the method
inconsistent => updated related variables.
【在 g******y 的大作中提到】 : 这个原因肯定是不对的。我们把这叫hidden logic,如果你必须这么干,只能说明你的 : design有问题,很可惜竟然从来没有人给楼主指出过。
|
y*******g 发帖数: 6599 | 47 java 不用getter/setter直接access 的话是静态绑定的。不太方便
【在 p**o 的大作中提到】 : 在灵活一些的动态语言比如python里,推荐的做法是直接修改类成员属性,如果哪天需 : 求复杂化了,再通过@property修饰一层实现更复杂的封装,但是客户代码完全不必改 : 动,没有“必须在每个赋值的地方进行改动”这个问题。在Java里常写getters/ : setters大概是Java语言本身的限制。我不太清楚其他的静态编译语言的最佳实践里是 : 否包含getters/setters。
|
m*******l 发帖数: 12782 | 48 我没有统计,就说明你统计过了?
的?
【在 g*****g 的大作中提到】 : 我老看看板上的帖子还算有依据。总比你靠谱多了,难道你还能统计了大多数学Java的? : 发信人: moneybull (moneybull), 信区: Programming : 标 题: Re: 为什么java要用setter和getter : 发信站: BBS 未名空间站 (Tue Dec 18 09:56:11 2012, 美东) : 大部分学Java的都是知其然而不知其所以然 : 学C++的,如果不知其所以然,很难混下去...
|
m***i 发帖数: 2480 | 49 It is not that important now, because all modern IDEs can extract an
accessor out of an attribute. You can always start with a public attribute
for simplicity and refactor the code as needed.
【在 L*********s 的大作中提到】 : 如果setter只是用来给属性赋值,那么确实没必要弄setter和getter, : 但是随着业务逻辑的发展,或者设计的变动, : 往往我们要求在给属性赋值的同时还要干一些其他事情。 : 也许你辛辛苦苦写下了一百多行给某个public属性赋值的语句后, : 忽然你的manager或客户要求你在给那个属性赋值的同时一定要synchronized()什么东 : 西, : 这时你就必须在每个赋值的地方进行改动。 : 如果你当初只用setter,那么只要修改一下setter就可以了。 : 同时为了让你的合作者们使用这个类时也只用setter,就得把属性设为private, : 然后就读数值就得用getter.
|
X****r 发帖数: 3557 | 50 你这是假设代码只是给自己用的。
【在 m***i 的大作中提到】 : It is not that important now, because all modern IDEs can extract an : accessor out of an attribute. You can always start with a public attribute : for simplicity and refactor the code as needed.
|
|
|
z*******3 发帖数: 13709 | 51 点睛之笔
【在 X****r 的大作中提到】 : 你这是假设代码只是给自己用的。
|
i***o 发帖数: 750 | 52 java族最爱谈什么design pattern。其实那些所谓的pattern,在以前都有,只不过拿
出来包装一下。java族成天daobdaob这些东西,实在让人无语。何况这些所谓的
pattern是不是真的有价值,还特别值得商榷。
如果编程真的可以总结成有限的pattern,程序员早就被程序(自动编程)干掉了。
说design pattern的,都是sb
【在 g*****g 的大作中提到】 : 你咋不说学C++的懂Design Pattern的实在不多,本版很少讨论这个。有些人成天还沉 : 迷于回 : 字怎么写呢?
|
r****y 发帖数: 26819 | 53 晕。。。到底什么是design pattern,不能光看人灌水的帖子吧。
应该抱着学习的态度,去找书翻翻或者起码google科普一下。
话说java族还喜欢谈OO呢。。。
【在 i***o 的大作中提到】 : java族最爱谈什么design pattern。其实那些所谓的pattern,在以前都有,只不过拿 : 出来包装一下。java族成天daobdaob这些东西,实在让人无语。何况这些所谓的 : pattern是不是真的有价值,还特别值得商榷。 : 如果编程真的可以总结成有限的pattern,程序员早就被程序(自动编程)干掉了。 : 说design pattern的,都是sb
|
z****e 发帖数: 54598 | 54 你还真说对了
大部分pattern都已经被封装成实现类了
会用就行了
别iterator拿出来,不懂得这是什么那就麻烦了
要不我们zkss?
随便你说一个pattern,我来说这个东西怎么用
然后为什么这么用,我对这个很有兴趣啊
因为大多数时候都是经验的东西,不是书本上的玩意
【在 i***o 的大作中提到】 : java族最爱谈什么design pattern。其实那些所谓的pattern,在以前都有,只不过拿 : 出来包装一下。java族成天daobdaob这些东西,实在让人无语。何况这些所谓的 : pattern是不是真的有价值,还特别值得商榷。 : 如果编程真的可以总结成有限的pattern,程序员早就被程序(自动编程)干掉了。 : 说design pattern的,都是sb
|
s*********t 发帖数: 1663 | 55 design pattern和语言有啥关系?
【在 i***o 的大作中提到】 : java族最爱谈什么design pattern。其实那些所谓的pattern,在以前都有,只不过拿 : 出来包装一下。java族成天daobdaob这些东西,实在让人无语。何况这些所谓的 : pattern是不是真的有价值,还特别值得商榷。 : 如果编程真的可以总结成有限的pattern,程序员早就被程序(自动编程)干掉了。 : 说design pattern的,都是sb
|
i***o 发帖数: 750 | 56 最搞的就是对于oo的java大谈design pattern。他妈那么多违反oo原则的jb烂玩意儿,
也好意思谈。好像这个东西有多么高深。thumb down。
【在 r****y 的大作中提到】 : 晕。。。到底什么是design pattern,不能光看人灌水的帖子吧。 : 应该抱着学习的态度,去找书翻翻或者起码google科普一下。 : 话说java族还喜欢谈OO呢。。。
|
i***o 发帖数: 750 | 57 iterator是java/design pattern先搞出来的,还是独有的?这个也成臭现的point了?
【在 z****e 的大作中提到】 : 你还真说对了 : 大部分pattern都已经被封装成实现类了 : 会用就行了 : 别iterator拿出来,不懂得这是什么那就麻烦了 : 要不我们zkss? : 随便你说一个pattern,我来说这个东西怎么用 : 然后为什么这么用,我对这个很有兴趣啊 : 因为大多数时候都是经验的东西,不是书本上的玩意
|
i***o 发帖数: 750 | 58 封装就封装了。垃圾lib多了去了。但是成天拿出来臭现,就奇怪了。
【在 z****e 的大作中提到】 : 你还真说对了 : 大部分pattern都已经被封装成实现类了 : 会用就行了 : 别iterator拿出来,不懂得这是什么那就麻烦了 : 要不我们zkss? : 随便你说一个pattern,我来说这个东西怎么用 : 然后为什么这么用,我对这个很有兴趣啊 : 因为大多数时候都是经验的东西,不是书本上的玩意
|
i***o 发帖数: 750 | 59 和语言本身没太大关系,和用这个语言的特定人群有很大关系似乎。走到哪里,这群人
都讲这个。起初也就听听。tm成天当个宝的说,特别搞,即便是这个thread 也有人说。
“你咋不说学C++的懂Design Pattern的实在不多,本版很少讨论这个。有些人成天还沉
迷于回
字怎么写呢?”
我是针对这种奇怪的人群,奇怪的行为说的。
【在 s*********t 的大作中提到】 : design pattern和语言有啥关系?
|
s*********t 发帖数: 1663 | 60 何必说出来。。。
说。
还沉
【在 i***o 的大作中提到】 : 和语言本身没太大关系,和用这个语言的特定人群有很大关系似乎。走到哪里,这群人 : 都讲这个。起初也就听听。tm成天当个宝的说,特别搞,即便是这个thread 也有人说。 : “你咋不说学C++的懂Design Pattern的实在不多,本版很少讨论这个。有些人成天还沉 : 迷于回 : 字怎么写呢?” : 我是针对这种奇怪的人群,奇怪的行为说的。
|
|
|
g*****g 发帖数: 34805 | 61 做人怎么做都行,最基本的就是要尊重事实。本版就是经常讨论C++语言细节,很少讨
论系统设计。
你觉得讨论设计模式很奇怪,我还觉得讨论语言细节很奇怪。
说。
还沉
【在 i***o 的大作中提到】 : 和语言本身没太大关系,和用这个语言的特定人群有很大关系似乎。走到哪里,这群人 : 都讲这个。起初也就听听。tm成天当个宝的说,特别搞,即便是这个thread 也有人说。 : “你咋不说学C++的懂Design Pattern的实在不多,本版很少讨论这个。有些人成天还沉 : 迷于回 : 字怎么写呢?” : 我是针对这种奇怪的人群,奇怪的行为说的。
|
i***o 发帖数: 750 | 62 问我为什么说这个,我当然要说为什么要说design pattern了。tm design pattern里
面那么多糟粕,也好意思总提。如果design pattern能不断扩充,进化也行,跟语言一
样的成长。所有各种语言的拥趸里,最烦就是java的,反复说,还以为自己很nb。js都
比java有意思,目前来看。
【在 s*********t 的大作中提到】 : 何必说出来。。。 : : 说。 : 还沉
|
g*****g 发帖数: 34805 | 63 原来你是真不懂的,design pattern当然是不断扩充,进化的。
诸如concurrency design pattern, enterprise design pattern都远远超出了
GOF的范畴。
【在 i***o 的大作中提到】 : 问我为什么说这个,我当然要说为什么要说design pattern了。tm design pattern里 : 面那么多糟粕,也好意思总提。如果design pattern能不断扩充,进化也行,跟语言一 : 样的成长。所有各种语言的拥趸里,最烦就是java的,反复说,还以为自己很nb。js都 : 比java有意思,目前来看。
|
z*******3 发帖数: 13709 | 64 这个不是垃圾吧?
这是经常用的吧
gof那些个模式天天都在用啊
你说说有哪个不用的
拿出来现是因为要求会
就跟oo一样,要不会那还搞什么?
【在 i***o 的大作中提到】 : 封装就封装了。垃圾lib多了去了。但是成天拿出来臭现,就奇怪了。
|
z*******3 发帖数: 13709 | 65 你要我说独有的么?
dto啊
你要不要展开说说dto?
【在 i***o 的大作中提到】 : iterator是java/design pattern先搞出来的,还是独有的?这个也成臭现的point了?
|
z*******3 发帖数: 13709 | 66 gof那点东西就是入门级的玩意
j2ee core pattern是中级水平
eai pattern是高级水平
【在 g*****g 的大作中提到】 : 原来你是真不懂的,design pattern当然是不断扩充,进化的。 : 诸如concurrency design pattern, enterprise design pattern都远远超出了 : GOF的范畴。
|
i***o 发帖数: 750 | 67 这种现法,和说回字几种写法区别在哪里?貌似有人很嘲笑。既然已经封装在lib里了
【在 z*******3 的大作中提到】 : 这个不是垃圾吧? : 这是经常用的吧 : gof那些个模式天天都在用啊 : 你说说有哪个不用的 : 拿出来现是因为要求会 : 就跟oo一样,要不会那还搞什么?
|
i***o 发帖数: 750 | 68 concurrency design pattern, enterprise design pattern 好高深啊,全都是java的
独门绝学?算不算进化,另说。
【在 g*****g 的大作中提到】 : 原来你是真不懂的,design pattern当然是不断扩充,进化的。 : 诸如concurrency design pattern, enterprise design pattern都远远超出了 : GOF的范畴。
|
g*****g 发帖数: 34805 | 69 Design pattern这种东西。不同语言实现有所不同,因为语言所限有的不能实现。但大
部分思想还是一样的。本来就是一个好的实践被抽象出来。随着系统越来越大,越来越
复杂,面对的问题越来越多,各种设计模式必然越来越多。
【在 i***o 的大作中提到】 : concurrency design pattern, enterprise design pattern 好高深啊,全都是java的 : 独门绝学?算不算进化,另说。
|
z*******3 发帖数: 13709 | 70 回字你常用的只有一种
而pattern常用你天天都用
倒是singleton有好几种实现
这个东西蛮多人讨论的
【在 i***o 的大作中提到】 : 这种现法,和说回字几种写法区别在哪里?貌似有人很嘲笑。既然已经封装在lib里了
|
|
|
i***o 发帖数: 750 | 71 抽象出来?java族是不是觉得这是因为java才有的?还是本来就有,被java族成天掉嘴
边?你说的concurrent,enterprise进化在哪里了?那些是后来你们搞出来的新玩意儿?
【在 g*****g 的大作中提到】 : Design pattern这种东西。不同语言实现有所不同,因为语言所限有的不能实现。但大 : 部分思想还是一样的。本来就是一个好的实践被抽象出来。随着系统越来越大,越来越 : 复杂,面对的问题越来越多,各种设计模式必然越来越多。
|
i***o 发帖数: 750 | 72 不完全是实现的不同。你们的这些pattern能有多大作用,天天用。所有的开发问题都
解决了?都是手工作坊,这个作坊,还居然瞧不起那个作坊了。
【在 z*******3 的大作中提到】 : 回字你常用的只有一种 : 而pattern常用你天天都用 : 倒是singleton有好几种实现 : 这个东西蛮多人讨论的
|
i***o 发帖数: 750 | 73 做人怎么做都行,最基本的就是要尊重事实。前后半句,是不是矛盾?programming和
语言关系极大。不管是语言还是所谓的pattern,最后的目标不都是"要有光,世界便有
了光“?
既然desgin pattern不是java家的,搞java的牛b什么?何况还那么多搞笑的pattern。
你们成天挂嘴边的很多pattern都很弱,好么,不是金科玉律,也不放之四海都可以用。
【在 g*****g 的大作中提到】 : 做人怎么做都行,最基本的就是要尊重事实。本版就是经常讨论C++语言细节,很少讨 : 论系统设计。 : 你觉得讨论设计模式很奇怪,我还觉得讨论语言细节很奇怪。 : : 说。 : 还沉
|
g*****g 发帖数: 34805 | 74 EAI pattern大多都是近15年enterprise programming搞出来的新玩意,Java恰恰是
enterprise programming最有代表性的语言。至于进化在哪里,我老厚道,就给你一些
例子。
你不懂的东西也不是我一两句话能解释清楚的。
http://www.eaipatterns.com/eaipatterns.html
儿?
【在 i***o 的大作中提到】 : 抽象出来?java族是不是觉得这是因为java才有的?还是本来就有,被java族成天掉嘴 : 边?你说的concurrent,enterprise进化在哪里了?那些是后来你们搞出来的新玩意儿?
|
g*****g 发帖数: 34805 | 75 既然指针不是C++家的,搞C++的牛b什么?何况还那么多搞笑的回字写法。
你们成天挂嘴边的很多回字写法都很弱,好么,不是金科玉律,也不放之四海都可以用。
用。
【在 i***o 的大作中提到】 : 做人怎么做都行,最基本的就是要尊重事实。前后半句,是不是矛盾?programming和 : 语言关系极大。不管是语言还是所谓的pattern,最后的目标不都是"要有光,世界便有 : 了光“? : 既然desgin pattern不是java家的,搞java的牛b什么?何况还那么多搞笑的pattern。 : 你们成天挂嘴边的很多pattern都很弱,好么,不是金科玉律,也不放之四海都可以用。
|
s*********t 发帖数: 1663 | 76 what's your opinion on this:
http://harmful.cat-v.org/software/java
These are views from the big bulls.
【在 g*****g 的大作中提到】 : EAI pattern大多都是近15年enterprise programming搞出来的新玩意,Java恰恰是 : enterprise programming最有代表性的语言。至于进化在哪里,我老厚道,就给你一些 : 例子。 : 你不懂的东西也不是我一两句话能解释清楚的。 : http://www.eaipatterns.com/eaipatterns.html : : 儿?
|
g*****g 发帖数: 34805 | 77 No language is perfect. And I think most of these quotes are just taken out
of context. Some of them are out of date, with new libs handing the problems
just fine. Language is to make simple things simple, difficult things
possible. Java isn't the best language on the former, but it does a great
job on the latter.
In fact, the way the industry is moving forward. It's hard for new language
to compete if it's not a JVM language. It takes years to build adequate
libraries to make a language useful, and that's assuming that language is
popular enough to begin with.
【在 s*********t 的大作中提到】 : what's your opinion on this: : http://harmful.cat-v.org/software/java : These are views from the big bulls.
|
j********x 发帖数: 2330 | 78 说实话我这辈子没见过几个c++程序员,见过的都是设计能力很强的选手
。。。
【在 S**I 的大作中提到】 : design pattern的经典用C++和很多C++程序员不懂design pattern不矛盾。
|
j********x 发帖数: 2330 | 79 我记得linus对java的评价似乎是低于c++的、、、
【在 d**********x 的大作中提到】 : 貌似facebook工资也不低啊,google工资也不低啊。。。比工资有啥意思? : 当然我承认,C++造就了一大批高不成低不就还自我感觉良好的程序员,Linus骂得好 : : 天下
|
y*******g 发帖数: 6599 | 80 ....
看不懂
【在 j********x 的大作中提到】 : 我记得linus对java的评价似乎是低于c++的、、、
|
|
|
j********x 发帖数: 2330 | 81 c++
语言坑应该被禁才对。。。
【在 y*******g 的大作中提到】 : .... : 看不懂
|
i***o 发帖数: 750 | 82 没有搞c++的会因为指针瞧不起别人。而且指针也不是c++最nb的地方。要说起来java还
是承自c的呢。
你挂嘴边的企业级应用 和java有屁关系?在java以前就没有企业应用了? 那些总结的
pattern,不是java独有的。
再说一遍,即便是那些pattern也不是金科玉律。
用。
【在 g*****g 的大作中提到】 : 既然指针不是C++家的,搞C++的牛b什么?何况还那么多搞笑的回字写法。 : 你们成天挂嘴边的很多回字写法都很弱,好么,不是金科玉律,也不放之四海都可以用。 : : 用。
|
i***o 发帖数: 750 | 83 java最初的想法很好。后来越来越烂。
【在 j********x 的大作中提到】 : 我记得linus对java的评价似乎是低于c++的、、、
|
g*****g 发帖数: 34805 | 84 我没说那些design pattern是java独有的,指针也不是C++独有的。但很多design
pattern确实是C++实现不了的,因为没有built-in reflection和serialization.既然
本版有C++程序员认为写Java的弱是因为写不了指针,我也可以认为写C++的弱是因为不
懂design pattern。很完美的逻辑。
敢问指针跟C++有屁关系?在C++之前就没有指针了?
【在 i***o 的大作中提到】 : 没有搞c++的会因为指针瞧不起别人。而且指针也不是c++最nb的地方。要说起来java还 : 是承自c的呢。 : 你挂嘴边的企业级应用 和java有屁关系?在java以前就没有企业应用了? 那些总结的 : pattern,不是java独有的。 : 再说一遍,即便是那些pattern也不是金科玉律。 : : 用。
|
z*******3 发帖数: 13709 | 85 java之前有企业应用
但是濒临绝境,因为维护成本随着项目的增大,呈现指数级上升
所以有了人月神话那本书,那本书也是最早软件工程这个学科的圣经
可以说也就是有了这本书之后,软件工程才真正开始发展起来
只不过有趣的是
到今天还有人以为
大型项目的问题,还跟30年前一样,以为人们还在面临着相同的问题
刻舟求剑
那本书提高了一个很经典的沟通成本的问题
就是一个面向过程的开发语言的死结
所以才有了后来的面向对象
也正是通过面向对象语言的大规模采用
才使得这种沟通成本大大降低,模块化结构化的思想深入人心
后来才有了虚拟机这个东西,有了虚拟机
就保证程序能够跑在所有的os上,至少理论上是这样
然后jdbc保证了程序能跟所有的数据库合作,hibernate等工具强化了这一合作
再通过其他手段,比如tomcat等开源工具,保证了能跟浏览器客户端浏览器的合作
还有jni提供了跟c以及c++等语言的接口
所以真正最大的glue是java
包括r什么function language都有跟java的接口
这才是java的真正威力所在
而不是什么某一个语言上的feature的好坏
只对比语言某一个feature是瞎子摸象的行为
相比之下,微软的东西就会故意给你跟其他公司的产品协作设置障碍
最简单就是.net就是不让你跨平台,理论上当然可以跨平台
但是因为微软的战略利益考虑,他就不让你跨平台
那你没有办法跟这种公司合作,所以就不合作了八
所以其实之前说的高级模式是eai
说的就是各种integration模式
因为现在所有的公司,都有自己的乱七八糟的软件系统
不可能说推翻重做,那么如何兼容并且利用起这些乱七八糟的软件系统
才是真正应该思考的问题,而不是还在如何实现上讨论
这很低级,这是本科生应该讨论的,或者是搞数学的人喜欢讨论的
当然很多nerd比较喜欢这么倒腾,包括搞linux那帮人
也好,社会也需要他们,毕竟一个东西没有人维护没有人奉献,那还是不济
但是对于其他多数人来说,该干嘛干嘛去
关于integration,以前说的web service是相对简单的一种方式
java提供了n多方式给你来搞这个,比如rmi,比如connector,比如直接用socket
这就涉及计算机网络的知识了,所以搞java最迷人的地方也在于此
你要跟所有人打交道,什么人都会见识一遍,不象搞research
一天到晚跟老板大眼对小眼,着实有些无聊
当然人的追求不一样,我们还是需要有人去搞research
【在 i***o 的大作中提到】 : 没有搞c++的会因为指针瞧不起别人。而且指针也不是c++最nb的地方。要说起来java还 : 是承自c的呢。 : 你挂嘴边的企业级应用 和java有屁关系?在java以前就没有企业应用了? 那些总结的 : pattern,不是java独有的。 : 再说一遍,即便是那些pattern也不是金科玉律。 : : 用。
|
s****0 发帖数: 117 | 86 很不幸,好虫有说对了。那个四人帮的书叫什么来着?
http://en.wikipedia.org/wiki/Design_Patterns_(book)
Design Patterns: Elements of Reusable Object-Oriented Software
【在 a9 的大作中提到】 : 好虫最近比较露窃啊。 : OO跟design pattern是两回事儿。 : : 还沉
|