一 面向对象的程序设计的由来

面向对象设计的由来见概述:http://www.cnblogs.com/moyand/p/8784210.html

二 什么是面向对象的程序设计及为什么要有它

面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式。

优点是:复杂度的问题流程化,进而简单化(一个复杂的问题,分成一个个小的步骤去实现,实现小的步骤将会非常简单)

缺点是:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身。

应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等。

面向对象的程序设计:核心是对象二字,(要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在的也可以创造出来。面向对象的程序设计好比如来设计西游记,如来要解决的问题是把经书传给东土大唐,如来想了想解决这个问题需要四个人:唐僧,沙和尚,猪八戒,孙悟空,每个人都有各自的特征和技能(这就是对象的概念,特征和技能分别对应对象的数据属性和方法属性),然而这并不好玩,于是如来又安排了一群妖魔鬼怪,为了防止师徒四人在取经路上被搞死,又安排了一群神仙保驾护航,这些都是对象。然后取经开始,师徒四人与妖魔鬼怪神仙交互着直到最后取得真经。如来根本不会管师徒四人按照什么流程去取),对象是特征与技能的结合体,基于面向对象设计程序就好比在创造一个世界,你就是这个世界的上帝,存在的皆为对象,不存在的也可以创造出来,与面向过程机械式的思维方式形成鲜明对比,面向对象更加注重对现实世界的模拟,是一种“上帝式”的思维方式。

优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。

缺点:

1. 编程的复杂度远高于面向过程,不了解面向对象而立即上手基于它设计程序,极容易出现过度设计的问题。一些扩展性要求低的场景使用面向对象会徒增编程难度,比如管理linux系统的shell脚本就不适合用面向对象去设计,面向过程反而更加适合。

2. 无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法准确地预测最终结果。于是我们经常看到对战类游戏,新增一个游戏人物,在对战的过程中极容易出现阴霸的技能,一刀砍死3个人,这种情况是无法准确预知的,只有对象之间交互才能准确地知道最终的结果。

应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方

面向对象的程序设计并不是全部。对于一个软件质量来说,面向对象的程序设计只是用来解决扩展性。

三 类与对象

类即类别、种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体

那么问题来了,先有的一个个具体存在的对象(比如一个具体存在的人),还是先有的人类这个概念,这个问题需要分两种情况去看

在现实世界中:先有对象,再有类

世界上肯定是先出现各种各样的实际存在的物体,然后随着人类文明的发展,人类站在不同的角度总结出了不同的种类,如人类、动物类、植物类等概念

也就说,对象是具体的存在,而类仅仅只是一个概念,并不真实存在

在程序中:务必保证先定义类,后产生对象

这与函数的使用是类似的,先定义函数,后调用函数,类也是一样的,在程序中需要先定义类,后调用类

不一样的是,调用函数会执行函数体代码返回的是函数体执行的结果,而调用类会产生对象,返回的是对象

按照上述步骤,我们来定义一个类(我们站在老男孩学校的角度去看,在座的各位都是学生)

  1. #在现实世界中,站在老男孩学校的角度:先有对象,再有类
  2. 对象1:李坦克
  3. 特征:
  4. 学校=oldboy
  5. 姓名=李坦克
  6. 性别=男
  7. 年龄=18
  8. 技能:
  9. 学习
  10. 吃饭
  11. 睡觉
  12.  
  13. 对象2:王大炮
  14. 特征:
  15. 学校=oldboy
  16. 姓名=王大炮
  17. 性别=女
  18. 年龄=38
  19. 技能:
  20. 学习
  21. 吃饭
  22. 睡觉
  23.  
  24. 对象3:牛榴弹
  25. 特征:
  26. 学校=oldboy
  27. 姓名=牛榴弹
  28. 性别=男
  29. 年龄=78
  30. 技能:
  31. 学习
  32. 吃饭
  33. 睡觉
  34.  
  35. 现实中的老男孩学生类
  36. 相似的特征:
  37. 学校=oldboy
  38. 相似的技能:
  39. 学习
  40. 吃饭
  41. 睡觉
  42.  
  43. 在现实世界中:先有对象,再有类

在现实世界中:先有对象,再有类

  1. #在程序中,务必保证:先定义(类),后使用(产生对象)
  2. PS:
  3. 1. 在程序中特征用变量标识,技能用函数标识
  4. 2. 因而类中最常见的无非是:变量和函数的定义
  5.  
  6. #程序中的类
  7. class OldboyStudent:
  8. school='oldboy'
  9. def learn(self):
  10. print('is learning')
  11.  
  12. def eat(self):
  13. print('is eating')
  14.  
  15. def sleep(self):
  16. print('is sleeping')
  17.  
  18. #注意:
  19. 1.类中可以有任意python代码,这些代码在类定义阶段便会执行
  20. 2.因而会产生新的名称空间,用来存放类的变量名与函数名,可以通过OldboyStudent.__dict__查看
  21. 3.对于经典类来说我们可以通过该字典操作类名称空间的名字(新式类有限制),但python为我们提供专门的.语法
  22. 4.点是访问属性的语法,类中定义的名字,都是类的属性
  23.  
  24. #程序中类的用法
  25. .:专门用来访问属性,本质操作的就是__dict__
  26. OldboyStudent.school #等于经典类的操作OldboyStudent.__dict__['school']
  27. OldboyStudent.school='Oldboy' #等于经典类的操作OldboyStudent.__dict__['school']='Oldboy'
  28. OldboyStudent.x=1 #等于经典类的操作OldboyStudent.__dict__['x']=1
  29. del OldboyStudent.x #等于经典类的操作OldboyStudent.__dict__.pop('x')
  30.  
  31. #程序中的对象
  32. #调用类,或称为实例化,得到对象
  33. s1=OldboyStudent()
  34. s2=OldboyStudent()
  35. s3=OldboyStudent()
  36.  
  37. #如此,s1、s2、s3都一样了,而这三者除了相似的属性之外还各种不同的属性,这就用到了__init__
  38. #注意:该方法是在对象产生之后才会执行,只用来为对象进行初始化操作,可以有任意代码,但一定不能有返回值
  39. class OldboyStudent:
  40. ......
  41. def __init__(self,name,age,sex):
  42. self.name=name
  43. self.age=age
  44. self.sex=sex
  45. ......
  46.  
  47. s1=OldboyStudent('李坦克','男',18) #先调用类产生空对象s1,然后调用OldboyStudent.__init__(s1,'李坦克','男',18)
  48. s2=OldboyStudent('王大炮','女',38)
  49. s3=OldboyStudent('牛榴弹','男',78)
  50.  
  51. #程序中对象的用法
  52. #执行__init__,s1.name='牛榴弹',很明显也会产生对象的名称空间
  53. s2.__dict__
  54. {'name': '王大炮', 'age': '女', 'sex': 38}
  55.  
  56. s2.name #s2.__dict__['name']
  57. s2.name='王三炮' #s2.__dict__['name']='王三炮'
  58. s2.course='python' #s2.__dict__['course']='python'
  59. del s2.course #s2.__dict__.pop('course')
  60.  
  61. 在程序中:先定义类,后产生对象

在程序中:先定义类,后产生对象

PS:

1. 站的角度不同,定义出的类是截然不同的,详见面向对象实战之需求分析

2. 现实中的类并不完全等于程序中的类,比如现实中的公司类,在程序中有时需要拆分成部门类,业务类...... 

3. 有时为了编程需求,程序中也可能会定义现实中不存在的类,比如策略类,现实中并不存在,但是在程序中却是一个很常见的类

  1. #python为类内置的特殊属性
  2. 类名.__name__# 类的名字(字符串)
  3. 类名.__doc__# 类的文档字符串
  4. 类名.__base__# 类的第一个父类(在讲继承时会讲)
  5. 类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
  6. 类名.__dict__# 类的字典属性
  7. 类名.__module__# 类定义所在的模块
  8. 类名.__class__# 实例对应的类(仅新式类中)

类的特殊属性(了解即可)

!!!补充说明:从代码级别看面向对象 !!!

  1. #1、在没有学习类这个概念时,数据与功能是分离的
  2. def exc1(host,port,db,charset):
  3. conn=connect(host,port,db,charset)
  4. conn.execute(sql)
  5. return xxx
  6.  
  7. def exc2(host,port,db,charset,proc_name)
  8. conn=connect(host,port,db,charset)
  9. conn.call_proc(sql)
  10. return xxx
  11.  
  12. #每次调用都需要重复传入一堆参数
  13. exc1('127.0.0.1',3306,'db1','utf8','select * from tb1;')
  14. exc2('127.0.0.1',3306,'db1','utf8','存储过程的名字')
  15.  
  16. #2、我们能想到的解决方法是,把这些变量都定义成全局变量
  17. HOST=‘127.0.0.1
  18. PORT=3306
  19. DB=‘db1
  20. CHARSET=‘utf8
  21.  
  22. def exc1(host,port,db,charset):
  23. conn=connect(host,port,db,charset)
  24. conn.execute(sql)
  25. return xxx
  26.  
  27. def exc2(host,port,db,charset,proc_name)
  28. conn=connect(host,port,db,charset)
  29. conn.call_proc(sql)
  30. return xxx
  31.  
  32. exc1(HOST,PORT,DB,CHARSET,'select * from tb1;')
  33. exc2(HOST,PORT,DB,CHARSET,'存储过程的名字')
  34.  
  35. #3、但是2的解决方法也是有问题的,按照2的思路,我们将会定义一大堆全局变量,这些全局变量并没有做任何区分,即能够被所有功能使用,然而事实上只有HOST,PORT,DB,CHARSET是给exc1和exc2这两个功能用的。言外之意:我们必须找出一种能够将数据与操作数据的方法组合到一起的解决方法,这就是我们说的类了
  36.  
  37. class MySQLHandler:
  38. def __init__(self,host,port,db,charset='utf8'):
  39. self.host=host
  40. self.port=port
  41. self.db=db
  42. self.charset=charset
  43. def exc1(self,sql):
  44. conn=connect(self.host,self.port,self.db,self.charset)
  45. res=conn.execute(sql)
  46. return res
  47.  
  48. def exc2(self,sql):
  49. conn=connect(self.host,self.port,self.db,self.charset)
  50. res=conn.call_proc(sql)
  51. return res
  52.  
  53. obj=MySQLHandler('127.0.0.1',3306,'db1')
  54. obj.exc1('select * from tb1;')
  55. obj.exc2('存储过程的名字')
  56.  
  57. #改进
  58. class MySQLHandler:
  59. def __init__(self,host,port,db,charset='utf8'):
  60. self.host=host
  61. self.port=port
  62. self.db=db
  63. self.charset=charset
  64. self.conn=connect(self.host,self.port,self.db,self.charset)
  65. def exc1(self,sql):
  66. return self.conn.execute(sql)
  67.  
  68. def exc2(self,sql):
  69. return self.conn.call_proc(sql)
  70.  
  71. obj=MySQLHandler('127.0.0.1',3306,'db1')
  72. obj.exc1('select * from tb1;')
  73. obj.exc2('存储过程的名字')
  74.  
  75. 数据与专门操作该数据的功能组合到一起

数据与专门操作该数据的功能组合到一起

四 属性查找

类有两种属性:数据属性和函数属性

1. 类的数据属性是所有对象共享的

2. 类的函数属性是绑定给对象用的

  1. #类的数据属性是所有对象共享的,id都一样
  2. print(id(OldboyStudent.school))
  3.  
  4. print(id(s1.school))
  5. print(id(s2.school))
  6. print(id(s3.school))
  7.  
  8. '''
  9. 4377347328
  10. 4377347328
  11. '''
  12.  
  13. #类的函数属性是绑定给对象使用的,obj.method称为绑定方法,内存地址都不一样
  14. #ps:id是python的实现机制,并不能真实反映内存地址,如果有内存地址,还是以内存地址为准
  15. print(OldboyStudent.learn)
  16. print(s1.learn)
  17. print(s2.learn)
  18. print(s3.learn)
  19. '''
  20. <function OldboyStudent.learn at 0x1021329d8>
  21. <bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x1021466d8>>
  22. <bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x102146710>>
  23. <bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x102146748>>
  24. '''

在obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常

练习:编写一个学生类,产生一堆学生对象,要求有一个计数器(属性),统计总共实例了多少个对象

五 绑定到对象的方法的特殊之处

  1. #改写
  2. class AllenStudent():
  3. school='oldboy'
  4. def __init__(self,name,age,sex):
  5. self.name=name
  6. self.age=age
  7. self.sex=sex
  8. def learn(self):
  9. print('%s is learning' %self.name)
  10.  
  11. def eat(self):
  12. print('%s is eating' %self.name)
  13.  
  14. def sleep(self):
  15. print('%s is sleeping' %self.name)
  16.  
  17. s1=AllenStudent('崔小跑','男',18)
  18. s2=AllenStudent('李大妞','女',20)
  19. s3=AllenStudent('牛鼻子','男',23)

类中定义的函数(没有被任何装饰器装饰的)是类的函数属性,类可以使用,但必须遵循函数的参数规则,有几个参数需要传几个参数

  1. AllenStudent.learn(s1)
  2. AllenStudent.learn(s2)
  3. AllenStudent.learn(s3)
  4. ####
  5. 崔小跑 is learning
  6. 李大妞 is learning
  7. 牛鼻子 is learning

类中定义的函数(没有被任何装饰器装饰的),其实主要是给对象使用的,而且是绑定到对象的,虽然所有对象

指向的都是相同的功能,但是绑定到不同的对象就是不同的绑定方法

强调:绑定到对象的方法的特殊之处在于,绑定给谁就由谁来调用,谁来调用就会将‘谁’本身当作第一个参数传给方法,即自动传值(方法__init__也是一样的道理)

  1. s1.learn() #等同于 AllenStudent.learn(s1)
  2. s2.learn() #等同于 AllenStudent.learn(s2)
  3. s3.learn() #等同于 AllenStudent.learn(s3)

注意:绑定到对象的方法的这种自动传值的特征,决定了在类中定义一个函数都要默认写一个参数self,self可以是任意名字,但是约定俗称的写成self。

类即类型

  提示:python的class术语与c++有一定区别,与modula-3更像。

  python中一切皆为对象,且python3中类与类型是一个概念,类型就是类

  1. #类型dict就是类dict
  2. >>> list
  3. <class 'list'>
  4.  
  5. #实例化的到3个对象l1,l2,l3
  6. >>> l1=list()
  7. >>> l2=list()
  8. >>> l3=list()
  9.  
  10. #三个对象都有绑定方法append,是相同的功能,但内存地址不同
  11. >>> l1.append
  12. <built-in method append of list object at 0x10b482b48>
  13. >>> l2.append
  14. <built-in method append of list object at 0x10b482b88>
  15. >>> l3.append
  16. <built-in method append of list object at 0x10b482bc8>
  17.  
  18. #操作绑定方法l1.append(3),就是在往l1添加3,绝对不会将3添加到l2或l3
  19. >>> l1.append(3)
  20. >>> l1
  21. [3]
  22. >>> l2
  23. []
  24. >>> l3
  25. []
  26. #调用类list.append(l3,111)等同于l3.append(111)
  27. >>> list.append(l3,111) #l3.append(111)
  28. >>> l3
  29. [111]

六、对象之间的交互

  1. class gailun: #定义英雄盖伦的类,不同的玩家可以用它实例出自己英雄
  2. camp='Demacia' #所有玩家的英雄(盖伦)的阵营都是德玛西亚(Demacia)
  3. def __init__(self,nickname,aggressivitv=58,life_value=455): #英雄的初始战斗力58,生命值455
  4. self.nickname=nickname #为自己的盖伦起个别名
  5. self.aggressivitv=aggressivitv #英雄都有自己的攻击力
  6. self.life_value=life_value #英雄都有自己的生命值
  7. def attack(self,enemy): #普通技能,enemy是敌人
  8. enemy.life_value-=self.aggressivitv #根据自己的攻击力,攻击敌人就减掉敌人的生命值。
  9. print('敌人%s还剩多少血量'%enemy.life_value)

我们可以仿照gailun类在创建一个riven类

  1. class ruiwen:
  2. camp='Noxus' #所有玩家的英雄(锐雯)的阵营都是诺克萨斯(Noxus);
  3. def __init__(self,nickname,aggressivity=54,life_value=414): #英雄的初始攻击力54;
  4. self.nickname=nickname #为自己的锐雯起个别名;
  5. self.aggressivity=aggressivity #英雄都有自己的攻击力;
  6. self.life_value=life_value #英雄都有自己的生命值;
  7. def attack(self,enemy): #普通攻击技能,enemy是敌人;
  8. enemy.life_value-=self.aggressivity #根据自己的攻击力,攻击敌人就减掉敌人的生命值。
  9. print('敌人%s还剩多少血量'%enemy.life_value)

实例出俩英雄

  1. g1=gailun('盖伦牛b') #因为类里self=g1,其他有默认参数,所以还需要一个nickname
  2. r1=ruiwen('锐雯66') #因为类里self=61,其他有默认参数,所以还需要一个nickname

交互:锐雯雯攻击草丛伦,反之一样

  1. print(g1.life_value) #查看盖伦血量
  2. g1.attack(r1)
  3.  
  4. #上述相当于 定义了这个对象身上独有的特征(共有的还留在class类里),g1就相当于这个人独有的特征,g1就生成为一个独立的内存空间
  1. #把(g1)(r1)独有的特征拿来让r1掉血,g1调用自己工厂里的bite类传入r1让r1少血
  1. r1.attack(g1)
  2.  
  3. #结果

455
敌人356还剩多少血量
敌人401还剩多少血量

  1. '''
  2. 现实中的对象:
  3. 人1
  4. 特征:
  5. 名字='刘大帅'
  6. 攻击力=60
  7. 生命值=100
  8. 技能:
  9.  
  10. 人2
  11. 特征:
  12. 名字='李大大'
  13. 攻击力=50
  14. 生命值=100
  15. 技能:
  16.  
  17. 现实中的人类
  18. 相同的特征
  19. 相同的技能

  20. '''
  21.  
  22. '''
  23. 现实中的对象:
  24. 狗1
  25. 特征:
  26. 名字='哈哈'
  27. 品种="京巴"
  28. 攻击力=80
  29. 生命值=50
  30. 技能:
  31.  
  32. 狗2
  33. 特征:
  34. 名字='威武'
  35. 品种="藏獒"
  36. 攻击力=200
  37. 生命值=200
  38. 技能:
  39.  
  40. 现实中的狗类
  41. 相同的特征
  42. 相同的技能

  43. '''
  44.  
  45. class People:
  46. def __init__(self,name,zhanli,shengming=100):
  47. self.name=name
  48. self.zhanli=zhanli
  49. self.shengming=shengming
  50. def bite(self,diren):
  51. diren.shengming-=self.zhanli
  52. print('''
  53. 人[%s]咬了一口狗[%s]
  54. 狗掉血[%s]
  55. 狗还剩血量[%s]
  56. ''' %(self.name,diren.name,self.zhanli,diren.shengming))
  57.  
  58. class Dog:
  59. def __init__(self,name,dog_type,zhanli,shengming):
  60. self.name = name
  61. self.dog_type=dog_type
  62. self.zhanli = zhanli
  63. self.shengming = shengming
  64.  
  65. def bite(self,diren):
  66. diren.shengming-=self.zhanli
  67. print('''
  68. 狗[%s]咬了一口人[%s]
  69. 人掉血[%s]
  70. 人还剩血量[%s]
  71. ''' % (self.name, diren.name, self.zhanli, diren.shengming))
  72.  
  73. p1=People('刘大帅',50)
  74. d1=Dog('哈哈','京巴狗',200,200)
  75.  
  76. p1.bite(d1)
  77. d1.bite(p1)
  78.  
  79. #结果
  80. 人[刘大帅]咬了一口狗[哈哈]
  81. 狗掉血[50]
  82. 狗还剩血量[150]
  83.  
  84. 狗[哈哈]咬了一口人[刘大帅]
  85. 人掉血[200]
  86. 人还剩血量[-100]

PS:人狗大战

补充:

  garen_hero.Q()称为向garen_hero这个对象发送了一条消息,让他去执行Q这个功能,类似的有:

  garen_hero.W()

  garen_hero.E()

  garen_hero.R()

八 继承与派生

python之旅:面向对象的程序设计的更多相关文章

  1. Python进阶---面向对象的程序设计思想

    Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  2. python 面向对象的程序设计

    一:什么是编程范式? 编程是程序员用特定的语法 + 数据结构 + 算法组成的代码来告诉计算机如何执行任务的过程. 如果把编程的过程比喻为练习武功,那么编程范式指的就是武林中的各种流派,而在编程的世界里 ...

  3. python基础——面向对象的程序设计

    python基础--面向对象的程序设计 1 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  4. python学习------面向对象的程序设计

    一 面向对象的程序设计的由来 1940年以前:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数 据.简单来说,就是直接编写 和 的序列来代表程序语言 ...

  5. Python之旅Day7 面向对象&异常处理

    ########################################面向对象初识######################################### 面向对象简介 面向对象编 ...

  6. Python之路【第八篇】:面向对象的程序设计

    阅读目录 一 面向对象的程序设计的由来二 什么是面向对象的程序设计及为什么要有它三 类和对象3.1 什么是对象,什么是类3.2 类相关知识3.3 对象相关知识3.4 对象之间的交互3.5 类名称空间与 ...

  7. python基础----面向对象的程序设计(五个阶段、对小白的忠告、关于OOP常用术语)、类、对象

    一.面向对象的软件开发有如下几个阶段                                              1.面向对象分析(object oriented analysis ,O ...

  8. Python学习之路9☞面向对象的程序设计

    一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什么是面向对象的程序设计及为什么要有它 面向过 ...

  9. python之面向对象的程序设计

    一.什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了程序的复杂度 缺点是: ...

随机推荐

  1. 笨办法学Python - 习题3: Numbers and Math

    目录 习题 3: 数字和数学计算 算术运算符 加分习题: 我的答案: 总结: 扩展: Python比较运算符 Python赋值运算符 Python位运算符 Python逻辑运算符 Python成员运算 ...

  2. Mongodb For Mac OSX && 登录验证

    题外话:尽管有不少人贴出了 <我不用mongodb的十大理由> 等系列文章,但是 NoSQL 的发展不会因此而止步, mongodb 是 NoSQL 的典型代表,楼主还是抱乐观态度的,有人 ...

  3. android学习-1

    所有的android应用都是由屏幕构成的一个集合,每个屏幕则由一个活动和一个布局组成. 活动--用户可以完成的一个确定的事. 布局--对屏幕外观的描述.(布局写为一个XML文件,回告诉android如 ...

  4. Class 1

    “在最艰苦的时候,就是你离成功最近的时候”,让暴风雨来得更猛烈些吧. 健身教练/学员,买的那本Java Web还是那么新,显然假期偷懒了,只能一点一点的补回来了.一个假期没有打开过自己的脑洞,真心醉了 ...

  5. C# Linq找不到行或已更改

    前段时间工作中的一个新需求,有机会用到了Linq to SQL.使用后的第一感觉,就是方便很多,也为整个项目节约了一大把的开发时间,甚至代码量也少了很多.不过在程序的实际运行中,始终会遇到一些莫名其妙 ...

  6. Spring笔记①--helloworld

    Spring Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架,它主要是为了解决企业应用开发的复杂性而诞生的: 目的:解决企业应用开发的复杂性 功能:使用基本的Javabean ...

  7. 第一个Sprint冲刺成果

    组长:李咏江,组员:叶煜稳,谢洪跃,周伟雄 进程:第一个算法功能完成

  8. <构建之法>前三章读后感—软件工程

    本教材不同于其他教材一贯的理知识直接灌溉,而是以对话形式向我们传授知识的,以使我们更好地理解知识点,更加清晰明确. 第一章 第一章的概述中,书本以多种方式,形象生动地向我们阐述了软件工程的内容,也让我 ...

  9. k米案例分析

    K米产品分析 第一部分 调研.评测 评测 上手体验 大一暑假的时候,在ktv和同学唱k的时候就接触过了. - -.所以对于k米的第一次上手体验已经不记得了(ps:尴尬)!~其实以前用它的时候想法很简单 ...

  10. 在sql server ide里数据修改数据

    在sql server 的客户端工具ssms里,只有在工具里打开后直接修改. 除了用这种方法外,还有其它方法可以改吗?比如像pl/sql里的for update sql server的客户端功能比较差 ...