“ 面向过程、面向对象、面向接口 ” 三种思维学习心得

本文是作者学习面向过程、面向对象和面向接口编程思维的心得体会。在面向过程中,关注的是结果;面向对象则强调对象及其功能;面向接口注重提升程序的复用性和扩展性。通过实例,作者分享了从C语言到Java的学习转变,认识到不同思维方式在项目开发中的重要性。
摘要由CSDN通过智能技术生成

(一) 写在前面

  1. 2020.11.01
    此时已是国内疫情稳定了的时候,作为正赶上疫情为大学关键时期的一名应届生,在导师的介绍下学习博客的使用,以总结自己IT成长的历程。
  2. 其实在去年(2019年),我已经是一名大三的学生,说急不急,也是要到了找实习的时候了。但正赶上疫情在家封住了脚步,安逸便像一颗隐形的毒药埋下了种子。等到回过头来,返校在即已是应届毕业生,找工作巨大的能力落差让我每每缓不过神来……
  3. 所幸一次机遇结识了自己的导师,在与他的倾心交谈中,才客观的看到大四的就业模式和未来一些的规划与可能的结果。在了解到我的基础功底之后——他劝我放弃秋招,全力准备春招。获益匪浅。
  4. 其实对于打击这种东西,我是挺喜闻乐见的。因为自身属于不撞到墙上都不知道疼的那种,所以对于自己的方向与动力,经过很长一段时间的心路历程之后,便坚定了许多。
  5. 我选择扎实的从头开始,没有退路了。

(二) 学习心得

1.面向过程

在之前接触C语言的时候,只感觉它是一种神奇的语言,就好像在电脑上写日记一样,便可以将一件事情完成。

至于如何去“完成”这件事,每个人的路无需相同,只需要达成预期相同的目的即可。

即只注重结果。

#include"stdio.h"
#include"stdlib.h"
typedef struct node{
	int data;
	struct node *next;
}ElemSN;
ElemSN *CreatLink(int Data[],int n);
void DelKeyNode(ElemSN *h,int key);
void PrintLink(ElemSN *h);
int main(void)
{
	int Data[12]={4,3,2,4,5,3,4,2,4,8,2,1};
	int key;
	printf("请输入关键字key:\n"); 
	scanf("%d",&key);
	ElemSN *head;
	head=CreatLink(Data,12);
	DelKeyNode(head,key);
	PrintLink(head);
}
ElemSN *CreatLink(int Data[],int n)
{
	ElemSN *h=NULL,*p;
	h=p=(ElemSN *)malloc(sizeof (ElemSN));
	h->next=NULL;
	for(int i=0;i<n;++i){
		p=p->next=(ElemSN *)malloc(sizeof (ElemSN));
		p->data=Data[i];
		p->next=NULL;
	}
	return h;
}
void DelKeyNode(ElemSN *h,int key)
{
	ElemSN *p,*delp;
	for(p=h;p->next;p=p->next)
		if(p->next->data==key){
			delp=p->next;
			p->next=p->next->next;
			free(delp);
		}
}
void PrintLink(ElemSN *h)
{
	ElemSN *p;
	for(p=h->next;p;p=p->next)
		printf("%d",p->data); 
}

这是我练习链表时写的C程序,那时内存空间使用能力很差,也根本不会有规范性的意识。

其实看来难免有些记流水账的味道。

2.面向对象

其实说起来这个概念在第一次接触Java的时候,便没有感觉有多么新奇,听着导师的演示,也不尽能体会抽象到思维的不同之处。

import java.util.Scanner;

public class HandWay {
    public void show() {
        int count = 0;
        while (1 == 1) {
            count++;
            Scanner in = new Scanner(System.in);
            System.out.println("1.石头\t 2.剪刀\t 3.布");
            System.out.println("请出拳:");
            int hand = in.nextInt();
            Judge judge = new Judge();
            Computer computer = new Computer();
            judge.compare(hand, computer.go());
            System.out.println("1.是\t 2.否");
            System.out.println("是否继续:");
            int i = in.nextInt();
            if (i == 2){
                System.out.println("游戏结束!");
                Player player = new Player();
                judge.end(player.grades, computer.grades);
                System.out.println("您一共玩了"+ count + "把。获胜" + player.grades + "把,失败" + computer.grades + "把。");
                break;
            }
        }
    }
}

于是真是应会了那一句:
“脑袋和眼睛说:我们明白了!
手说:你俩开玩笑呢!”

上面是一个面向对象小项目中自己码失败的一段,目的是为实现“猜拳”这一小游戏。

早已习惯了记流水账的直线思维,每次去描述一个类的时候,都恨不得一股脑的将所有功能都塞进去。于是就算描写出了可以实现功能的代码,也发现根本没有东西创建第二个类了。

import java.util.Scanner;

public class Users {
    public String name;
    public int score;
    public String way;

    public int showHand() {
        Scanner in = new Scanner(System.in);
        System.out.println("\n请出拳:(1.石头 2.剪刀 3.布)");
        int n = in.nextInt();
        if (n == 1)
            way = "石头";
        else if (n == 2)
            way = "剪刀";
        else
            way = "布";
        return n;
    }
}
package day1031.guess;

import java.util.Random;

public class Computer {
    public String name;
    public int score;
    public String way;

    public Computer() {
        Random random = new Random();
        int n = random.nextInt(3) + 1;
        if (n == 1)
            name = "刘备";
        else if (n == 2)
            name = "关羽";
        else
            name = "张飞";
    }

    public int showHand() {
        Random random = new Random();
        int n = random.nextInt(3) + 1;
        if (n == 1)
            way = "石头";
        else if (n == 2)
            way = "剪刀";
        else
            way = "布";
        return n;
    }
}

package day1031.guess;

public class Judge {
    public int count;

    public void judgeOne(Users users, Computer computer) {
        count++;
        int un = users.showHand();
        int cn = computer.showHand();

        System.out.println("\n" + users.name + "出拳为:" + users.way);
        System.out.println(computer.name + "出拳为:" + computer.way);

        if (un == 1 && cn== 2 || un == 2 && cn== 3 || un == 3 && cn == 1) {
            users.score++;
            System.out.println("不错,你赢得了此局的胜利!");
        }else if (un == cn){
            System.out.println("真可惜,此局是平局。");
        }else {
            computer.score++;
            System.out.println("哦不,此局你输了……");
        }
    }

    public void declareResult(Users users, Computer computer) {
        System.out.println("共进行" + count + "局");
        System.out.println(users.name + "赢了" + users.score + "把");
        System.out.println(computer.name + "赢了" + computer.score + "把");
        System.out.println("平局" + (count - users.score - computer.score) + "把");
        if (users.score > computer.score)
            System.out.println("^-^ 真厉害,你赢了!");
        else if (users.score == computer.score)
            System.out.println("-_-! 好可惜,是平局。");
        else
            System.out.println("v_v 太惨了,你输了……");
    }
}

package day1031.guess;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        System.out.println("******************************");
        System.out.println("*********欢迎进入猜拳游戏********");
        System.out.println("******************************");
        Scanner in = new Scanner(System.in);
        System.out.println("请选择您的游戏角色:(1.曹操\t 2.张辽\t 3.夏侯惇)");
        int n = in.nextInt();
        Users users = new Users();
        if (n == 1)
            users.name = "曹操";
        else if (n == 2)
            users.name = "张辽";
        else
            users.name = "夏侯惇";
        System.out.println("\n您的游戏角色为" + users.name);
        Judge judge = new Judge();
        Computer computer = new Computer();
        System.out.println("您将对战" + computer.name + "");
        while (true){
            judge.judgeOne(users,computer);
            System.out.println("是否继续? (1/0)");
            n = in.nextInt();
            if (n == 0)
                break;
        }
        judge.declareResult(users, computer);
    }
}


于是在导师的带领下,放下手指,首先去构思:
有什么对象去参加了这个工程;
又需要这些对象去完成什么功能。

之所以上手直接就敲,便是只注重实现这个结果的本身,而没有客观去分析它的参与者与实现历程。

即更需注重参与的对象。

再与面向过程相互配合,便可以更规范的完成一个项目。包括项目书写的一些细节,切身感受 调用 的美感,逐渐体会到开发的感觉。

3.面向接口

其实相较于前两者面向过程、面向对象关于开发思维上的东西,面向接口更趋向于一种开发方式。

即是将不同类中一些相同的方法(像是猫、狗都有吃的功能),便不用在每一个类中逐个声明,编写一个有“吃”这一抽象方法的接口,之后不仅已有的类使用时将其实现即可,新生的类直接实现这一接口亦可实现此功能。

即大幅提成了程序的广泛应用性。

其实各种开发方式刚开始接触,心得体会因为开发经验的限制尚且贫瘠,不过已经感受到一些开发层面上的理解,配合经验逐步的积累,日后便会有更深刻的认识,和对此刻认识误区的更正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值