关于java,面向对象的疑惑
bqyy 2012-01-09 04:20:23 声明:
一、本人水平很菜,开发工具用过PB,C#,JAVA,虽然都写过三两个小程序,但没啥真才实学,卖点银子挣钱糊口而已。
二、我无意判断语言或平台的高下,只是心中有太多疑惑无法解决,想求个说法
三、本人追求还是有点,也断断续续的看了些面向对象、设计模式之类的书,不求能做出什么高水平的产品,只求自己写出的东西看着不那么丑陋。
四、从没写过这么长的帖子,希望大伙多给意见少骂娘。
先从PB说起。PB用的最多了,用了PB就离不开SQL,所以SQL也略知一二。我想大多数做管理软件的前辈都是SQL方面的专家,那才是真的精通,我这水平顶多算知道。
以前用PB写程序,没啥框架、设计模式、面向对象的概念,一大堆函数摞在一起,就变成了程序,维护的时候虽然有点工作量,但也不觉得很麻烦,有了改动的要求,从数据库开始,修改表结构、视图、存贮过程然后在前台修改录入界面,处理逻辑可以放在前台,也可以放在存贮过程里,反正一套下来也用不了多久。
后来听说OO好啊,逻辑清楚、重用性强、容易维护,所以就去看,看了很久,不知道怎么用。
最初的想法是在PB里先实践一把面向对象,一是因为PB我熟啊,不用学语言,二是因为pb除了没有interface外,继承、多态和封装三个OO的特性是完整的,但结果却是一个无比痛苦的过程,我几乎不会写程序了。最关键的问题就在数据存贮那里,因为没有工具的支持,如果想象JAVA里那样应用ORM简直就是不可能完成的任务,所以只能写SQL或用开发工具提供的函数。
后来再用PB还是先尽着先把活干完的硬道理,少想OO。
在PB那里碰了壁,就想,也许学JAVA能解决这个问题?听说Hibernate啥的做ORM很好。所以就学了JAVA,但JAVA真是让人又爱又恨的东东。
爱他什么?第一是免费!我个人分析,JAVA为什么能大火?既然很多大牛都说语言无高下,为什么JAVA会比C#火?为什么android会用JAVA?为什么越大的软件开发公司越要用JAVA?我想,JAVA及相关完整的一系列产品如web服务器、数据库、开发环境的免费是一个重要原因,一个开发公司如果20个人,光开发环境得省多少银子啊!第二是跨平台的基础上保证了效率。linux+tomcat+mysql/oracle对于中小项目来说多么轻快,而微软的2008+IIS+SQL 2008是一个多么臃肿的组合!当然,java方案也可以更加臃肿,但我感觉常见的web应用前面的组合基本够用了。
恨他什么?一是标准太多,解决方案太多!象我这样的程序员,想的是怎样干活、收钱,而不是先要从几十个标准或解决方案中找个合适的来用,否则等我们想清楚用什么了,客户早跑了!二是JAVA的产品线是不是不完整的?昨天想把以前PB的程序升级一下,用JAVA重写一遍,以前也知道有个swing,后来上网一查,据说swing的界面效果很一般,甚至,比PB的还要一般,这可真是太难让人接受了!后来查到有IBM的SWT和oracle新出的JavaFX,但好像都不能跨平台了?这不是把java的第二大优点给抛弃了?如果不能跨平台,是不是不如用C#?
无论怎样,还是先学了JAVA又学Hibernate。才发觉Hibernate是不是没有传说中那么美好?Hibernate+strust2+spring确实可以得到理想的框架结构,strust2负责把收集前台数据组装对象,spring负责控制事务,Hibernate负责持久化,但是,如果只需要查询对象中的某几个属性(数据库中的某几个列),Hibernate可以么?如果我不管对象原来的内容是什么,为列增加新的内容,SQL只需要一个操作,Hibernate需要几个?如果修改库结构,hibernate要从mapping file到处理逻辑到前台页面都改一通,比原来好像又多了个修改mapping file?(别说我需求做的不好,用户的心思,那基本是没得猜)还有,AJAX类应用里使用用GSON的时候,好像可以使用Annotation说明哪些属性可以变成json串,但如果我要动态改变成为json串的属性怎么办?这些场合应用面向对象会不会无谓的增加系统的通信量和负担?
在学习JAVA之中,学了一阵C#,而且在.net 2.0上做了一个和银行联网收费的服务端程序,使用套接字与银行通信,多线程和队列处理请求,并没有传说的效率低、不稳定之类问题。.net的好处是什么?windows平台上,一整套实用的解决方案,不必东奔西走,一站式服务到家,方便啊,不必选,也没的选,有什么用什么就行了。.net的缺点是什么?一是收费!从OS到开发工具到数据库全面收费!二是弄了个CLS(公共语言规范)让全体语言为.net打工,结果是大伙都不听他的,只剩微软的产品了,其他做语言的公司要么关门要么彻底成了MS的附庸,给MS打工,完全没有创新(PB和delphi的结局);三是,微软的产品越来越庞大!我现在的机器是i5 750/4g,这配置放以前那也是入门级服务器了,跑个2008+IIS象老牛拉破车。虽然企业级的Linux一直很庞大,但一直没有微软慢。
罗嗦了这么多,也不知道表述明白了没有,求解答!!!