探索面向对象编程之求三角形的面积

项目一:探索面像对象编程

-面向对象程序设计(0bject 0riented Programming)最为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的,任何一个模型都有不能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围更普遍、更集中、更深刻地描述了客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。

任务一、采用面向对象方式求三角形面积

(一)编程实现

(1)采用面向过程的思路

定义一个计算三角形面积的函数calulateTriangleleArea(double a, double b ,double c),输入a、b、c作为参数传入==calulateTriangleleArea()==函数,得到计算结果

在这里插入图片描述
在这里插入图片描述
-运行程序,查看结果
在这里插入图片描述
在这里插入图片描述

(2)采用面向对象的思路

-创建Triangle类,包含a.b.c私有属性,提供无参与有参构造方法,提供getters和setters,重写toString方法,提供getArea()方法;创建TaskTriangle类,创建Triangle对象,设计对象属性a、b、c,调用对象方法,计算出三角形面积
-创建net.lixin.src.p01.t02包,然后在包里创建Triangle类
在这里插入图片描述

定义三个缺省权限·的双精度属性a、b、c、定义计算三角型面积的方法getArea(),返回值是双精度
(1)利用三边关系定理判断能否构成三角形
三边关系定理:任意两边之和大于第三边
(2)如果能够构三角形 利用海伦公式来计算
三边为a、b、c,半周长 p = a + b + c 2 p=\displaystyle\frac{a+b+c}{2} p=2a+b+c
从。
面积 a r e a = p ( p − a ) ( p − b ) ( p − c ) area=\displaystyle\sqrt{p(p-a)(p-b)(p-c)} area=p(pa)(pb)(pc)
在这里插入图片描述
-类Triangle封装了(a、b、c)和操作(getArea()),封装(Eccapsulation)是面向对象的三大特征之一。
-利用IDEA的工具,可以显示Triangle类的类图
1.鼠标右击Triangle包
在这里插入图片描述
在这里插入图片描述

-点击之后会出如下界面按住换色区域右击
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

-创建一个测试类TaskTriangle类,在其主方法里,创建Triangle对象,设置其属性,调用其方法,计算得到三角形面积

在这里插入图片描述

在这里插入图片描述
-运行程序,查看结果
在这里插入图片描述
-缺省权限的不足:由于a、b、c是缺省权限属性,可以通过对象.属性名直接访问,比如triangle.a=10;边长不能为负,这样直接访问属性显然不合理,因此,我们应该将属性私有化,外界不能直接访问,而必须通过共有方法来设置和获取属性,于是私有属性得到有效保护。
-如何实现类的封装:在定义一个类的时,将类中的属性私有化,即使用
private
关键词来修饰,私有属性只能在他所在类中被访问,如果外界想要访问私有属性,需要提供一些使用public修饰的公有方法,其中包括用于获取属性值的==getxxx()方法(简称getter)和设置属性值setxxx()==方法(简称setter)。
-修改Triangle类,将a、b、c属性设置为私有属性

在这里插入图片描述
-查看TaskTriangle类,就会发现程序报错 ,不能通过triangle对象直接去访问私有属性a、b、c
在这里插入图片描述
-为了让Triangle对象能设置私有属性a、b、c我们就要提供setxxx()方法(setter方法)。

在这里插入图片描述
-参数名与成员名变量相同时,给成员名变量this前缀,this这个特殊变量代表的当前类的实列,相当于Python类中的self
-此时,Triangle对象可以设置私有属性a、b、c,但是无法获取私有属性,我们还需要定义getxxx()方法-getter方法
在这里插入图片描述
-修改TaskTriangle类,通过setter方法来设置对象属性
在这里插入图片描述
-运行程序,查看结果
在这里插入图片描述
在这里插入图片描述
-演示对象调用getxxx()方法
在这里插入图片描述
-操作技巧:利用IDEA自动生成类的getter和setter
-删除掉刚才我们创建的getter和setter
在这里插入图片描述

-演示如何自动生成getter和setter
在这里插入图片描述

在这里插入图片描述

-单击[Code]菜单下[Generate…]huoan组合键==[+,]==弹出[Generate]快捷菜单,选择[Getter and Setter], 然后选中三个属性a、b、c单击[OK]按钮即可生成getters和setters
在这里插入图片描述

在这里插入图片描述

-在Triangle类主方法里打印三角形对象,会不会显示三角形的数据信息呢?

在这里插入图片描述
-显示的是对象的路径.类名@地址,其实地址就是对象的哈希码
-如何才能打印对象时显示对象的信息呢?
我们需要去重写(Override)Triangle类的==tostring()方法,类似于Python类__str__()方法的功能
-采用IDEA自动生成
tostring()==方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
-再次运行TaskTriangle,看看直接打印对象的效果
在这里插入图片描述
=其实,打印对象时,默认就会调用对象的==tostring()==方法

p

课堂练习 :让三角新和面积输出结果保留两位有效数字

在这里插入图片描述

在这里插入图片描述
-刚才我们创建三角形对象时,基于默认的无参构造方法来进行对象的初始化的
-如果我们创建类时没有写构造方法,系统会自动添加一个无参构造方法。
在这里插入图片描述
在这里插入图片描述
-构造方法有啥特点:1.public权限2.没有返回值类型;3.构造方法名跟类名一样
-下面我们来给三角形定义一个有有参构造方法
-
-此时,切换到TaskTriangle类,会发现创建对象出错
在这里插入图片描述
-为什么会报错呢?当我们创建添加无参构造方法时,系统不会自动有参构造方法,除非手动添加无参构造方法
在这里插入图片描述
-那蓝色光条移到类名上,表明不初始化任何成员变量

在这里插入图片描述
在这里插入图片描述
-我们给构造方法写点代码
在这里插入图片描述
-此时,再去看TaskTriangle类你就会发现错误消失了
在这里插入图片描述
-运行程序,查看结果
在这里插入图片描述
-创建==TaskTriangle2()==类来测试有参构造方法在这里插入图片描述

在这里插入图片描述
-运行程序,查看结果
在这里插入图片描述

课堂练习:如何防范给三角形a、b、c成员变量赋值

-修改Triangle类的setA()、setB()、setC()方法
在这里插入图片描述
-运行Tasktriangle类查看结果
在这里插入图片描述
-但是如果边长不是正数,就会抛出异常,不再去调用三角形对象的方法计算面积
在这里插入图片描述
-修改TaskTriangle。调用这三个方法就必须处理异常
在这里插入图片描述
-运行TaskTriangle类,进行测试
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值