面向对象和面向对象编程
Posted pinkowonote
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象和面向对象编程相关的知识,希望对你有一定的参考价值。
一、面向过程
(一)面向过程的特点
1. 分析解决步骤,使用函数一步步实现步骤
2. 以算法为核心
3. 自顶向下设计,最初就必须对问题深入了解
4. 大问题——>小问题来求解
5. 表现形式:使用函数作为划分程序的基本单位
6. 直接面向问题
(二)面向过程的优点
1. 易于掌握理解,符合人类的思维模式
2. 对需求明确、规模不大、变动较小的问题非常适合
(三)面向过程的缺点
1. 数据与操作分离,对数据与操作的修改非常困难
2. 数据安全得不到保证
3. 程序架构的依赖关系不合理
main();函数依赖于子函数,子函数又依赖于更小的函数
子函数实现细节,一个函数是否成功就依赖于这些细节,但这些细节又经常变化。
main();函数程序的核心逻辑依赖于外延的细节,一个细节上的变动会引起一系列变动,如果一个小细节出现问题,将会导致整个程序崩溃
4. 对需求不明确、规模大、变动大的问题非常不适合
二、面向对象
(一)面向对象的设计思想
确定该问题由那些事物组成,使用类模拟出该事物。
通过类间接解决问题
自下而上设计,从问题的一部分入手,一点点构建出整个程序
表现形式:用类来作为划分程序的基本单位
对需求明确、规模不大、变动较小的问题显得累赘
对需求不明确、规模大、变动大的问题非常不适合
三、类与对象
(一)什么是类
1. 类:把一类事物的静态属性和动态可执行操作组合在一起
2. 类是抽象的,用来模拟一类事物,是一个概念
3. 一旦类被定义,类的概念就永远存在了
(二)什么是对象
1. 类是一个个体
2. 具体的,实实在在存在的事物
3. 生命周期短暂,会有生存和消亡
(三)类与对象
类:汽车设计图
对象:具体的第一辆汽车、第二辆汽车……
(四)类的定义
/* 时间:2020年2月 编辑人:pinkowonote 功能: 目的:java */ package demo; class Person { /*age是【变量 / 类的属性 / 类数据成员 / 字段 / 域】*/ int age; /*shout()是【方法 / 类的成员函数】 *shout()方法可以直接访问同一个类中的age变量 */ void shout() { System.out.println("Oh my god!I am" + age); } } public class Demo { public static void main(String[] args) { /*……*/ } } /* 在VS_2013中输出结果是: -------------------------------- -------------------------------- 总结: */
(五)程序执行过程
内存是一个线性的一维空间
内存中分为若干个区域:eg:把内存中的区域模拟为栈和堆(栈内存和堆内存是同一个物理硬件上的内存)
C语言中【aa】和【new A()】是两个不同的对象:(* aa).i、(* aa).j
(* aa):aa内的地址指向的对象
(* aa).i:【aa内的地址指向的对象】的成员 i
引用即指针
JAVA中【aa】和【new A()】其实把他们当作同一个对象,指针变量aa表示的就是该变量指向的那块内存:aa.i、aa.j
aa.i:【静态指针变量aa】所指向的动态内存中的 A 对象中 i 成员
/* 时间:2020年2月 编辑人:pinkowonote 功能: 目的:JAVA内存分配 */ package demo; class A { int i; int j; } public class Demo { public static void main(String[] args) { /* new A();:在堆中动态分配一块区域,当作A类的对象使用 * aa:本身的内存是在栈中分配 * 堆中【A类的对象的内存地址】赋值给了aa * aa指向堆中的内存(代便堆中的内存)*/ /* int * p =(int *)malloc(sizeof(int)); * A * aa = (A *)malloc(sizeof(A));*/ A aa = new A(); aa.i = 10; aa.j = 20; System.out.printf("%d %d ", aa.i, aa.j); } } /* 在VS_2013中输出结果是: -------------------------------- 10 20 -------------------------------- 总结: */
aa1和aa2指的是两个不同的new对象
/* 时间:2020年2月 编辑人:pinkowonote 功能: 目的:JAVA内存分配 */ package demo; class A { int i; int j; } public class Demo { public static void main(String[] args) { /*两个new A();肯定不是同一个对象*/ A aa1 = new A(); A aa2 = new A(); aa1.i = 50; aa2.i = 80; System.out.printf("%d %d ", aa1.i, aa2.i); } } /* 在VS_2013中输出结果是: -------------------------------- 50 80 -------------------------------- 总结: */
/* 时间:2020年2月 编辑人:pinkowonote 功能: 目的:JAVA内存分配 */ package demo; class A { int i; int j; } public class Demo { public static void main(String[] args) { /* 有3块内存aa1、new A();、aa2 * */ A aa1 = new A(); A aa2 = aa1; aa1.j = 50; System.out.printf("%d %d ", aa1.j, aa2.j); } } /* 在VS_2013中输出结果是: -------------------------------- 50 50 -------------------------------- 总结: */
四、访问控制符
五、构造函数
六、关键字this
七、关键字static
以上是关于面向对象和面向对象编程的主要内容,如果未能解决你的问题,请参考以下文章