[OC] 面向对象程序设计

开始学习IOS开发了,如果哪位朋友看到了我的文章,觉得哪里不好的,可以指出,谢谢。

记录这些文章是为了学习有个记录,然后以后不懂的地方还可以翻看,努力加油,为了目标而奋斗!!!

 

问题:把大象放入冰箱

一、面向过程

  注重业务功能

  1、打开冰箱的门

  2、把大象放入冰箱

  3、关闭冰箱的门

二、面向对象

  注重功能的封装和层次

  1、对象1:冰箱

    功能:打开冰箱门、放入东西、关闭冰箱门

  2、对象2:大象

     

   代码演示:

  

 1 //
 2 //  Fridge.m
 3 //  面向对象
 4 //
 5 //  Created by macos on 14-8-10.
 6 //  Copyright (c) 2014年 macos. All rights reserved.
 7 //
 8 
 9 #import "Fridge.h"
10 
11 @implementation Fridge
12 @synthesize name,opend,array;
13 -(id) initWidthName:(NSString *)iname
14 {
15     if (self = [super init]) {
16         self.name = iname;
17         opend = false;
18         self.array = [[NSMutableArray alloc] init];
19         NSLog(@"初始化一台:%@电冰箱",self.name);
20     }
21     return self;
22 }
23 
24 -(BOOL) openDoor
25 {
26     if (opend) {
27         NSLog(@"门已经打开,关闭后才能打开");
28     }
29     else
30     {
31         opend = true;
32         NSLog(@"成功打开冰箱的门");
33     }
34     return opend;
35 }
36 
37 -(BOOL) putIn:(id)something
38 {
39     if (opend) {
40         [array addObject:something];
41         NSLog(@"%@成功放入冰箱中,物品数量%lu",something,[array count]);
42     }
43     else
44     {
45         NSLog(@"%@不能放入冰箱中,物品数量%lu:冰箱门未打开",something,[array count]);
46     }
47     return opend;
48 }
49 
50 -(BOOL) closeDoor
51 {
52     if (opend) {
53         opend = false;
54         NSLog(@"成功关闭冰箱的门");
55     }
56     else
57     {
58         NSLog(@"无法关闭冰箱的门:门已经关闭");
59     }
60     return opend;
61 }
62 @end
 1 //
 2 //  Elephant.m
 3 //  面向对象
 4 //
 5 //  Created by macos on 14-8-10.
 6 //  Copyright (c) 2014年 macos. All rights reserved.
 7 //
 8 
 9 #import "Elephant.h"
10 
11 @implementation Elephant
12 @synthesize name;
13 
14 -(id) initWidthName:(NSString *) iname
15 {
16     NSLog(@"初始化一头:%@象",iname);
17     if (self = [super init]) {
18         self.name=iname;
19     }
20     return self;
21 }
22 
23 -(NSString *) description
24 {
25     return [[NSString alloc] initWithFormat:@"[%@象]",self.name];
26 }
27 @end

 

 1 //
 2 //  main.m
 3 //  OOPDemo
 4 //
 5 //  Created by macos on 14-8-10.
 6 //  Copyright (c) 2014年 macos. All rights reserved.
 7 //  面向对象设计模式
 8 
 9 #import <Foundation/Foundation.h>
10 #import "Fridge.h"
11 #import "Elephant.h"
12 
13 int main(int argc, const char * argv[])
14 {
15 
16     @autoreleasepool {
17         Fridge *fridge = [[Fridge alloc] initWidthName:@"海尔"];
18         Elephant *elephant = [[Elephant alloc] initWidthName:@"南美洲"];
19         [fridge openDoor] &&
20         fridge.opend &&
21         [fridge putIn:elephant] &&
22         [fridge closeDoor];
23     }
24     return 0;
25 }

 

  

1 2014-08-10 04:55:47.890 OOPDemo[2625:303] 初始化一台:海尔电冰箱
2 2014-08-10 04:55:48.029 OOPDemo[2625:303] 初始化一头:南美洲象
3 2014-08-10 04:55:48.036 OOPDemo[2625:303] 成功打开冰箱的门
4 2014-08-10 04:55:48.047 OOPDemo[2625:303] [南美洲象]成功放入冰箱中,物品数量1
5 2014-08-10 04:55:48.053 OOPDemo[2625:303] 成功关闭冰箱的门
6 Program ended with exit code: 0
执行结果

 

转载于:https://www.cnblogs.com/fenglaijun/p/3903228.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的 STM32 控制 SG90 舵机的程序设计: ```c #include "stm32f10x.h" #define PWM_PERIOD 20000 // PWM 周期,单位为微秒 void delay_us(uint32_t us) { SysTick->LOAD = us * 9; // 9 表示时钟周期为 72MHz SysTick->VAL = 0; SysTick->CTRL = SysTick_CTRL_ENABLE_Msk; while ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0); SysTick->CTRL = 0; } void set_pwm_duty(uint16_t duty) { TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = duty; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM2, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); } int main(void) { uint16_t duty = 1500; // 初始占空比为 1500us uint16_t min_duty = 1000; // 最小占空比为 1000us uint16_t max_duty = 2000; // 最大占空比为 2000us uint16_t step = 10; // 每次改变的步长为 10us RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Period = PWM_PERIOD - 1; TIM_TimeBaseStructure.TIM_Prescaler = 71; // 时钟分频为 72MHz/72=1MHz TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); set_pwm_duty(duty); // 初始化 PWM 占空比 TIM_Cmd(TIM2, ENABLE); while (1) { // 向右转 for (duty = 1500; duty < max_duty; duty += step) { set_pwm_duty(duty); delay_us(10000); // 延时 10ms } // 向左转 for (duty = max_duty; duty > min_duty; duty -= step) { set_pwm_duty(duty); delay_us(10000); // 延时 10ms } } } ``` 该程序使用了 STM32 的 TIM2 定时器和 GPIOA 的 PA0 引脚来控制 SG90 舵机。首先,需要定义 PWM 的周期为 20ms(即 20000us),并实现一个延时函数 `delay_us()`,用于控制舵机转动的速度。然后,设置最大占空比和最小占空比为 2000us 和 1000us,步长为 10us。在 `main()` 函数中,分别向右转和向左转,每次转动步长为 10us,延时 10ms。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值