尚硅谷03:前端开发之ES | Vue_es6 Axios Node Npm

news2024/11/25 14:45:00

目录

内容介绍

统一异常处理

统一日志处理

前端介绍、工具使用

ES6入门

Vue入门

Vue语法

Vue语法高级


内容介绍

1、统一异常处理

2、统一日志处理(了解)

3、前端介绍

4、ES6

5、VUE入门、基本语法

6、VUE高级语法

7、axios(重点)

8、node

9、npm(重点)

统一异常处理
  1. 创建异常
  2. 实现统一异常处理

3、特殊异常处理

@ExceptionHandler(ArithmeticException.class)

  @ResponseBody

  public R error(ArithmeticException e){

    e.printStackTrace();

    return R.error().message("特殊异常处理");

  }

4、自定义异常处理

(1)创建自定义异常

@Data

@AllArgsConstructor

@NoArgsConstructor

  public class YyghException extends RuntimeException {

    @ApiModelProperty(value = "状态码")

    private Integer code;

    @ApiModelProperty(value = "异常信息")

    private String msg;

  }

(2)抓取异常

@ExceptionHandler(YyghException.class)

  @ResponseBody

  public R error(YyghException e){

    e.printStackTrace();

    return R.error().code(e.getCode()).message(e.getMsg());

  }

(3)手动抛异常

统一日志处理

1、日志级别

ERROR、WARN、INFO、DEBUG

2、切换级别

# 设置日志级别

  logging.level.root=DEBUG

3、Logback日志

spring boot内部使用Logback作为日志实现的框架。

Logbacklog4j非常相似,如果你对log4j很熟悉,那对logback很快就会得心应手。

前端介绍、工具使用

1、前端介绍

2、VS Code

(1)安装

(2)安装插件

(3)项目初始化

(4)实例

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <title>Document</title>

</head>

<body>

    <h1>Helllo!!!</h1>

   

</body>

</html>

(5)发布方式一

(6)发布方式二

*没有弹出浏览器

ES6入门

1、是什么

ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准

2、基本语法

1)let声明变量

<script>

        //var不区分作用域

        //let区分作用域

        {

            var a = 100

            let b = 200

        }

        console.log(a)

        //console.log(b)

        //var可以重复声明变量

        //let不可以重复声明变量

        var c = 300

        var c = 400

        console.log(c)

        let d = 500

        // let d = 600

        console.log(d)

        //var会提升变量声明

        //let不会提升变量声明

        console.log(e)

        var e  = 700

        console.log(f)

        let f  = 800

       

    </script>



(2)const声明常量(只读变量)

<script>

        //常量定义后不可修改

        //定义常量必须赋值

        const PI = 3.14

        //PI = 3

        console.log(PI)

        const a

        a= 100

        console.log(a)

    </script>



(3)解构赋值

<script>

        var a=1,b=2,c=3

        console.log(a,b,c)

        //解析数组赋值

        let [x,y,z] = [1,2,3]

        console.log(x,y,z)



        let user = {name:'zhang3',age:33}

        let name1 = user.name

        let age1 = user.age

        console.log(name1,age1)

         //解析对象赋值

        let {name,age}= user

        console.log(name,age)

    </script>



(4)模板字符串

<script>

        //拼接字符串

        let str = 'hello'

        let className = 'java230308'

        console.log(str + ' ' + className + ' !')

        console.log(`${str} ${className} !`)

        //拼接长字符串

        let head =

            `<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <title>Document</title>

</head>`

        console.log(head)

        function getName(){

            return 'java230308'

        }

        //调用函数

        console.log(`${str} ${getName()} !`)

    </script>

(5)声明对象简写

  <script>

        let name = 'zhang3'

        let age = 33

        let user = {name:name,age:age}

        console.log(user)

        let user1 = {name,age}

        console.log(user1)

        </script>

(6)定义方法简写

<script>

        //定义函数

        // function f1(){

        // }

        // let f2 = function(){

        // }

        // f1()

        //定义方法

        let user = {

            name:'zhang3',

            age:33,

            // sayHi:function(){

            //     console.log("hello zhang3")

            // }

            sayHi(){

                console.log("hello zhang3")

            }

        }

        user.sayHi()

    </script>

7)对象拓展运算符

<script>

        let user = {

            name:'zhang3',

            age:33,

        }

        let user1 = user

        console.log(user1)

        let user2 = {...user}

        console.log(user2)

        let name = {name:'li4'}

        let age ={age:44}

        let user3 = {...name,...age}

        console.log(user3)

        let user4 = {...user2,...user3}

        console.log(user4)

    </script>

(8)箭头函数

<script>

        let f1 = function (a){

            return a

        }

        console.log(f1(100))

        let f2 = a => a

        console.log(f2(200))

        let f3 = (a,b)=> a+b

        console.log(f3(200,100))

        //回调函数使用

        // $.get('url',data=>{



        // })       

        </script><script>

        let user = {

            name:'zhang3',

            age:33,

        }

        let user1 = user

        console.log(user1)

        let user2 = {...user}

        console.log(user2)

        let name = {name:'li4'}

        let age ={age:44}

        let user3 = {...name,...age}

        console.log(user3)

        let user4 = {...user2,...user3}

        console.log(user4)

    </script>

(8)箭头函数

<script>

        let f1 = function (a){

            return a

        }

        console.log(f1(100))

        let f2 = a => a

        console.log(f2(200))

        let f3 = (a,b)=> a+b

        console.log(f3(200,100))

        //回调函数使用

        // $.get('url',data=>{



        // })       

        </script>

Vue入门

1、是什么

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。

官方网站:Vue.js - 渐进式 JavaScript 框架 | Vue.js

2、使用vue

1)导入依赖

2)编写实例

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <title>Document</title>

</head>

<body>

    <div id="app">

        <h1>{{message}}</h1>

    </div>

    <script src="vue.min.js"></script>

    <script>

        let app = new Vue({

            el:'#app',

            data:{

                message:'Hello Vue'

            }

        })

    </script>

</body>

</html>

  1. 抽取代码片段

1)步骤

2)代码片段

{

    // Place your global snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and

    // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope

    // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is

    // used to trigger the snippet and the body will be expanded and inserted. Possible variables are:

    // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders.

    // Placeholders with the same ids are connected.

    // Example:

    "vuehtml": {

        "scope": "html",

        "prefix": "vuehtml",

        "body": [

"<!DOCTYPE html>",

"<html lang=\"en\">",

"<head>",

"    <meta charset=\"UTF-8\">",

"    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",

"    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">",

"    <title>Document</title>",

"</head>",

"<body>",

"    <div id=\"app\">",

"        <h1>{{message}}</h1>",

"    </div>",

"    <script src=\"vue.min.js\"></script>",

"    <script>",

"        let app = new Vue({",

"            el:'#app',",

"            data:{",

"                message:'Hello Vue' ",

"            }",

"        })",

"    </script>",

"</body>",

"</html>",

        ],

        "description": "vue基础html片段"

    }

}

Vue语法
1、基本数据渲染和指令

<body>

    <div id="app">

        <h1 v-bind:title="title">{{message}}</h1>

        <h1 :title="title">{{message}}</h1>

    </div>

    <script src="vue.min.js"></script>

    <script>

        let app = new Vue({

            el:'#app',

            data:{

                message:'Hello Vue',

                title:'标题'

            }

        })

    </script>

</body>

2、双向数据绑定

<body>

    <div id="app">

        <div> <input type="text" v-bind:value="search.info"> </div>

        <div>{{search.info}}</div>

        <div> <input type="text" v-model="search.info"> </div>

    </div>

    <script src="vue.min.js"></script>

    <script>

        let app = new Vue({

            el:'#app',

            data:{

                search:{

                    info:'尚硅谷'

                }

            }

        })

    </script>

</body>

3、事件

<body>

    <div id="app">

        <div> <input type="text" v-model="search.info"> </div>

        <div>{{search.info}}</div>

        <button v-on:click="searchInfo()">搜索</button>

        <button @click="searchInfo()">搜索</button>

    </div>

    <script src="vue.min.js"></script>

    <script>

        let app = new Vue({

            el:'#app',

            data:{

                search:{

                    info:'尚硅谷'

                }

            },

            methods: {

                searchInfo(){

                    console.log("searchInfo!!!!!!!!!!");

                }

            }

        })

    </script>

</body>



4、修饰符(了解)

<body>

    <div id="app">

        <form action="" v-on:submit.prevent ="dosubmit()">

            <input type="text" v-model="user.name">

            <button type="submit">提交信息</button>

        </form>

    </div>

    <script src="vue.min.js"></script>

    <script>

        let app = new Vue({

            el: '#app',

            data: {

                user:{}

            },

            methods: {

                dosubmit(){

                    console.log("提交信息!!!!!!!!!!!")

                }

            }

        })

    </script>

</body>

5、条件渲染

<body>

    <div id="app">

        <div>  <input type="checkbox" v-model="ok"> 是否同意1 {{ok}}</div>

        <div v-if="ok" >同意</div>

        <div v-else >查看协议。。。。。。。</div>

    </div>

    <div id="app2">

            <div>  <input type="checkbox" v-model="ok"> 是否同意2 {{ok}}</div>

            <div v-show="ok" >同意</div>

            <div  v-show="!ok" >查看协议。。。。。。。</div>

     </div>

    <script src="vue.min.js"></script>

    <script>

        let app = new Vue({

            el:'#app',

            data:{

                ok:false

            }

        })

        let app2 = new Vue({

            el:'#app2',

            data:{

                ok:false

            }

        })

    </script>

</body>

6、列表渲染

<body>

    <div id="app">

        <ul>

            <li v-for="n in nums">{{n}}</li>

        </ul>

        <table>

            <tr v-for="(user,i) in userList">

                <td>{{i+1}}</td>

                <td>{{user.id}}</td>

                <td>{{user.name}}</td>

                <td>{{user.age}}</td>

            </tr>

        </table>

    </div>

    <script src="vue.min.js"></script>

    <script>

        let app = new Vue({

            el:'#app',

            data:{

                nums:[1,2,3,4,5],

                userList:[

                    {id:1,name:'zhang3',age:33},

                    {id:2,name:'li4',age:44},

                    {id:3,name:'wang5',age:55}

                ]

            }

        })

    </script>

</body>

Vue语法高级

1、组件

1)是什么

组件(Component)是 Vue.js 最强大的功能之一。

组件可以扩展 HTML 元素,封装可重用的代码。

2)局部组件

<body>

    <div id="app">

        <Navbar></Navbar>

        <Navbar></Navbar>

        <Navbar></Navbar>

    </div>

    <script src="vue.min.js"></script>

    <script>

        let app = new Vue({

            el:'#app',

            data:{

               

            },

            components: {

                'Navbar':{

                    template:'<ul><li>菜单1</li><li>菜单2</li><li>菜单3</li></ul>'

                }

            }

        })

    </script>

</body>



(3)全局组件

*封装js文件

Vue.component('Navbar',{

    template:'<ul><li>菜单1</li><li>菜单2</li><li>菜单3</li></ul>'

})

*导入js,使用组件

<body>

    <div id="app">

        <Navbar></Navbar>

        <Navbar></Navbar>

        <Navbar></Navbar>

    </div>

    <script src="vue.min.js"></script>

    <script src="Navbar.js"></script>

    <script>

       



        let app = new Vue({

            el:'#app',

            data:{

               

            },

            components: {

               

            }

        })

    </script>

</body>





2、Vue实例生命周期

(1)查看流程图

(2)实现实例

<body>

    <div id="app">

        <div> <h1 id="h1">{{message}}</h1> </div>

        <div> <button v-on:click="updateInfo()">更新</button> </div>

    </div>

    <script src="vue.min.js"></script>

    <script>

        let app = new Vue({

            el:'#app',

            data:{

                message:'床前明月光'

            },

            methods: {

                showInfo(){

                    console.log("showInfo!!!!!!!!!!!!!")

                },

                updateInfo(){

                    console.log("updateInfo!!!!!!!!!!!!!")

                    this.message = '疑是地上霜'

                }

            },

            //查看初始化时4个钩子方法

            beforeCreate () {//第1个钩子方法,vue属性和方法均未初始化

                console.log("beforeCreate!!!!!!!!!!!!!")

                console.log("this.message="+this.message)

                //this.showInfo()

            },

            created () {//第2个钩子方法,vue属性和方法均已初始化

                console.log("created!!!!!!!!!!!!!")

                console.log("this.message="+this.message)

                this.showInfo()

            },

            beforeMount () {//第3个钩子方法,vue属性还未渲染页面

                console.log("beforeMount!!!!!!!!!!!!!")

                let text = document.getElementById('h1').innerText

                console.log("内存模板="+this.message)

                console.log("页面元素="+text)

            },

            mounted () {//第4个钩子方法,vue属性已渲染页面

                console.log("mounted!!!!!!!!!!!!!")

                let text = document.getElementById('h1').innerText

                console.log("内存模板="+this.message)

                console.log("页面元素="+text)

            },

            //更新时两个钩子方法

            beforeUpdate () {

                console.log("beforeUpdate!!!!!!!!!!!!!")

                let text = document.getElementById('h1').innerText

                console.log("内存模板="+this.message)

                console.log("页面元素="+text)

            },

            updated () {

                console.log("updated!!!!!!!!!!!!!")

                let text = document.getElementById('h1').innerText

                console.log("内存模板="+this.message)

                console.log("页面元素="+text)

            }

        })

    </script>

</body>

3、路由

1)是什么

Vue.js 路由允许我们通过不同的 URL 访问不同的内容。

2)添加js

3)引入依赖

  <script src="vue.min.js"></script>

    <script src="vue-router.min.js"></script>

(4)实例

<body>

    <div id="app">

        <h1>Hello App!</h1>

        <p>

            <!-- 使用 router-link 组件来导航. -->

            <!-- 通过传入 `to` 属性指定链接. -->

            <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->

            <router-link to="/">首页</router-link>

            <router-link to="/student">会员管理</router-link>

            <router-link to="/teacher">讲师管理</router-link>

        </p>

        <!-- 路由出口 -->

        <!-- 路由匹配到的组件将渲染在这里 -->

        <router-view></router-view>

    </div>

    <script src="vue.min.js"></script>

    <script src="vue-router.min.js"></script>

    <script>



        // 1. 定义(路由)组件。

        // 可以从其他文件 import 进来

        const Welcome = { template: '<div>欢迎</div>' }

        const Student = { template: '<div>student list</div>' }

        const Teacher = { template: '<div>teacher list</div>' }



        // 2. 定义路由

        // 每个路由应该映射一个组件。

        const routes = [

            { path: '/', redirect: '/welcome' }, //设置默认指向的路径

            { path: '/welcome', component: Welcome },

            { path: '/student', component: Student },

            { path: '/teacher', component: Teacher }

        ]



        // 3. 创建 router 实例,然后传 `routes` 配置

        const router = new VueRouter({

            routes// (缩写)相当于 routes: routes

        })



        // 4. 创建和挂载根实例。

        // 从而让整个应用都有路由功能

        const app = new Vue({

            el: '#app',

            router

        })



    // 现在,应用已经启动了!

    </script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/746778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pod:Kubernetes里最核心的概念

为了解决这样多应用联合运行的问题&#xff0c;同时还要不破坏容器的隔离&#xff0c;就需要在容器外面再建立一个“收纳舱”&#xff0c;让多个容器既保持相对独立&#xff0c;又能够小范围共享网络、存储等资源&#xff0c;而且永远是“绑在一起”的状态。 Pod 的概念也就呼…

【Ajax】笔记-Ajax案例准备与请求基本操作

案例准备HTML 按钮div <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>AJAX GET 请求</title&g…

C语言进阶之自定义类型(结构体,枚举,联合)

这里写目录标题 1.结构体1.1 结构的基础知识1.2 结构的声明1.3 特殊的声明1.4 结构的自引用1.5 结构体变量的定义和初始化1.6 结构体内存对齐1.7 修改默认对齐数1.8 结构体传参 2. 位段2.1 什么是位段2.2 位段的内存分配2.3 位段的跨平台问题2.4 位段在网络传输中的应用3. 枚举…

【科普贴】UWB定位详解:0维定位、一维定位、二维定位、三维定位

室内定位系统方案中&#xff0c;UWB定位技术目前应用较多&#xff0c;得益于UWB定位10-30厘米的超高定位精度。目前根据使用场景的不同&#xff0c;UWB TDOA定位系统的定位维度分为以下4种&#xff1a;0维定位&#xff08;存在性检测&#xff09;、一维定位、二维定位、三维定位…

spring cloud 搭建消息中间件 RabbitMQ 环境、Mac/Windows下载安装RabbitMQ、配置RabbitMQ环境变量

主要内容概述&#xff1a;spring cloud工程&#xff0c;Mac/Windows下载安装RabbitMQ&#xff0c;并配置环境变量 前言 这里学习如何安装 RabbitMQ&#xff0c;因为远程配置中心的动态更新需要结合 RabbitMQ 来使用。 什么是 RabbitMQ RabbitMQ 是消息队列中间件&#xff0c…

日撸java三百行day74

文章目录 说明通用BP神经网络之激活函数1. 激活函数2. 激活函数分类1.1 反正切函数&#xff08;ArcTan&#xff09;1.2 指数线性函数&#xff08;ELU&#xff09;1.3 恒等函数1.4 泄漏线性整流函数(LEAKY_RELU)1.5 softsign1.6 softplus1.7 Relu函数1.8 sigmoid函数1.9 双曲正切…

一拖三充电线(单USB-C转三充)的解决方案--HUSB251

HUSB251是一款PD DRP双向快充协议芯片&#xff0c;符合USB PD3.1协议&#xff0c;支持PPS、28V EPR FPDO和EPR AVS&#xff0c;并可提供灵活的可编程PDO。当其在Source模式下时&#xff0c;DPDM PHY支持可编程的专有协议&#xff0c;支持BC1.2和5V2.4A、QC2.0/3.0、AFC、FCP和S…

免费系统维护清理工具:Onyx for Mac图文安装教程

OnyX 是一款适用于 macOS 的免费系统维护和优化工具。它由法国开发者 Jol Barrire&#xff08;也称为 Titanium&#xff09;创建&#xff0c;旨在帮助 macOS 用户管理和优化其计算机系统。 OnyX 提供了许多功能和工具&#xff0c;可以帮助用户执行各种系统维护任务。它是一个非…

【雕爷学编程】Arduino动手做(117)---P10V706LED屏模组2

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

logstash的四个插件

grok 正则捕获插件 内置正则表达式调用 在logstash conf.d文件夹下面创建filter conf文件&#xff0c;内容如下 ​编辑 logstash 官方也给了一些常用的常量来表达那些正则表达式&#xff0c;可以到这个 Github 地址查看有哪些常用的常量&#xff1a; 自定义表达式调用 muta…

【深度学习】梳理一下概念和术语

1 说明 您是深度学习的新手,正在寻找全面的指南来帮助您了解基础知识及其他方面吗?不要再看了!在本文中,我们将深入研究 20 个基本的深度学习概念,从基础知识开始,逐渐转向更高级的主题。从人工神经网络(ANN)到梯度下降和激活函数(Sigmoid,ReLU,SoftMax),我们将探…

Pytorch 安装与配置

Pytorch 安装与配置 NVIDIA系统管理界面查看 nvidia-smi 进入NVIDIA系统管理界面 对应的详细解释看下图 参考博文 (53条消息) nvidia-smi命令详解和一些高阶技巧介绍_Chaos_Wang_的博客-CSDN博客 CUDA 查看 CUDA 有两类&#xff1a;其中一类是驱动API(Driver API)&#xff…

「深度学习之优化算法」(十二)水波算法

1. 水波算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   水波算法(Water wave optimization)是根据水波理论提出的优化算法。什么是水波理论?简单来说就是水波的宽度越小,其频率越高,频率与水波宽度的平方根成反比(具体细节我也不懂,物理方面的)。水波…

换零钱II:Python代码解Java题目

银行现存零钱面值种类动态变化但数量无限&#xff0c;类方法change()完成指定金额的最少零钱个数兑换。 (本笔记适合学透python基本数据结构&#xff0c;熟悉class的基构造&#xff0c;对类内全局变量有一定认的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1…

Mysql——》慢查询日志

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

TCR中的缓存和共享属性与PTE中的缓存和共享属性的区别是啥?

那么就请继续思考&#xff1a; Translation Table Walk访问页表的缓存策略&#xff0c;这里的页表到底是缓存到cache中&#xff0c;还是缓存到PTW中呢&#xff1f;

使用腾讯云轻量应用服务器搭建网站教程

腾讯云轻量应用服务器怎么搭建网站&#xff1f;太简单了&#xff0c;轻量服务器选择宝塔Linux镜像&#xff0c;然后在宝塔面板上添加站点&#xff0c;以WordPress建站为例&#xff0c;腾讯云服务器网来详细说下腾讯云轻量应用服务器搭建网站全流程&#xff0c;包括轻量服务器配…

【Elasticsearch】ES精确查询和范围查询,ES时间字段排序实例,ES倒排索引介绍

本文ES版本是7.X以上&#xff0c;之前的版本语法可能会有些差异&#xff0c;请注意这些比较重要的细节。问海量数据搜索时为什么ES会比较快&#xff1f; 精确查询 termQuery BoolQueryBuilder boolQuery QueryBuilders.boolQuery();boolQuery.must(QueryBuilders.termQuery(…

ORB-SLAM2学习笔记2之TUM开源数据运行ORB-SLAM2生成轨迹并用evo工具评估轨迹

文章目录 0 引言1 evo工具1.1 简介1.2 常用命令1.3 安装 2 TUM数据3 单目ORB-SLAM23.1 运行ORB-SLAM23.2 evo评估轨迹3.2.1 载入和对比轨迹3.2.2 计算绝对位姿误差 4 RGB-D ORB-SLAM24.1 运行ORB-SLAM24.2 evo评估轨迹4.2.1 载入和对比轨迹4.2.2 计算绝对轨迹误差 ORB-SLAM2学习…

软件工程——第12章面向对象实现知识点整理

本专栏是博主个人笔记&#xff0c;主要目的是利用碎片化的时间来记忆软工知识点&#xff0c;特此声明&#xff01; 文章目录 1. 面向对象语言技术的特点&#xff1f; 2.选择面向对象程序设计语言时主要应该考虑哪些因素&#xff1f; 3.面向对象设计结果只能用面向对象语言实…