Banco de Dados em aplicativos Mobile Swift

Role para baixo

Desafio 02

Nesta etapa, você deverá resolver o desafio 02:

  • Implementar as rotinas de conectividade ao banco de dados, além de documentar o código.

Para isso, você estudará os seguintes conteúdos:

  • Conexão com o Banco de Dados
ilustração do símbolo do programa SWIFT, trata-se do desenho de um celular azul com fundo branco, há também uma pomba cor branca com contorno  vermelho, ao seu lado, um cilindro de três esferas sobrepostas uma em cima da outra na cor cinza.

Introdução

Nas primeiras versões da linguagem Swift, o código era fechado e somente a Apple detinha seu controle de desenvolvimento. Não havia, portanto, a possibilidade de utilizar a linguagem Swift para conectar a um Banco de Dados como o MySQL.

Após a versão 2.2, em dezembro de 2015, a linguagem tornou-se open source e a IBM iniciou o projeto para tornar a linguagem capaz de ser aplicada em soluções para servidores. Surgiram também outros projetos para dar a capacidade de acesso aos Bancos de Dados, como o da Linux e o projeto SwiftKueryMySQL, que vamos utilizar para nossas atividades.

Mãos segurando um aparelho celular da cor preta com tela de fundo branco, à frente há uma tela de computador, com algumas imagens desfocadas, também há um teclado.

Fonte: Pexels

configuração do projeto

Mas antes de iniciar necessitaremos preparar o ambiente de desenvolvimento para que as rotinas possam ser compiladas e executadas adequadamente. Esta preparação inclui os seguintes passos:

  1. Criar o Apple ID e conta de Desenvolvedor Apple.
  2. Instalar o Xcode e ferramentas de linha de comando do Xcode.
  3. Instalar o Servidor de Banco de Dados MySQL e MySQL Workbench.
  4. Instalar kit de desenvolvimento MySQL.
  5. Criar o projeto no Xcode.
Composição isométrica de serviços em nuvem com grade de elementos de infraestrutura de computação em nuvem conectados com ilustração vetorial de linhas tracejadas. Há diversos ícones, de pessoas andando em labirinto, de computação em nuvem, uma tela de computador, celular com pessoas sentadas sobre a tela, tudo em miniatura.

Fonte: Freepik

Criar o Apple ID e conta de Desenvolvedor Apple

Para o desenvolvimento de uma aplicação para iOS é necessário ter o Apple ID e o registro de desenvolvedor Apple. O Apple ID é uma conta gratuita, usada para conectar seu perfil com informações e configurações em dispositivos Apple. Para carregar aplicativos na loja Apple é necessário ter o registro de desenvolvedor Apple, com custo de US$ 99,00 anualmente. Para o nosso projeto, utilizaremos uma conta de desenvolvimento sem custo para poder instalar o aplicativo no dispositivo móvel conectado via USB.

pdf

Clique aqui para ver o passo-a-passo para criar sua Apple ID com o registro de desenvolvedor Apple.

Instalar o Xcode e ferramentas de linha de comando do Xcode

O Xcode é um software livre da Apple, usada como IDE para gerenciamento de projetos para o sistema operacional macOS.

Com a evolução da linguagem Swift e do sistema operacional da Apple, é importante que utilizemos as versões mais recentes da linguagem. Estabelecer a versão 5.3 como mínima para a linguagem Swift implica diretamente na definição das versões do macOS (Sistema Operacional no qual o Xcode será utilizado), iOS (Sistema Operacional do dispositivo móvel) e Xcode (IDE). A tabela abaixo elaborada pela Apple apresenta a relação das versões entre os ambientes e a linguagem Swift. Confira na tabela elaborada pela Apple a seguir abas para conhecer a relação das versões entre os ambientes e a linguagem Swift.

pdf

Clique aqui para ver a tabela.

A partir destas versões apresentadas podemos determinar qual é a plataforma de desenvolvimento poderemos utilizar. A tabela abaixo apresenta as menores versões de equipamentos Apple que podemos utilizar para o desenvolvimento:

Equipamento Versão
iMac 21.5” e 27” Late 2012
Mac Mini Late 2012
MaBook Retina 12” Early 2015
MacBook Air 11” e 13” Mid 2012
MacBook Pro 13” e 15” Mid 2012
MacBook Pro Retina 13” e 15” Late 2012

Fonte: https://eshop.macsales.com/guides/Mac_OS_X_Compatibility

Os dispositivos móveis mais antigos que são suportados ao desenvolvimento, segundo as informações da primeira tabela são: iPhone 6s e iPad Air 2.

pdf

Veja como instalar o Xcode e ferramentas de linha de comando do Xcode, clicando aqui.

Instalar o Servidor de Banco de Dados MySQL e MySQL Workbench

Necessitaremos instalar o servidor de banco de dados MySQL para que nossos programas consigam armazenar seus dados. Caso já tenha instalado pode pular este passo.

pdf

Confira como instalar o Servidor de Banco de dados MySQL e MySQL Workbench clicando aqui.

Instalar kit de desenvolvimento MySQL

Nesta etapa vamos preparar a infraestrutura para que possamos compilar nossos programas utilizando as bibliotecas que tem os mecanismos de acesso ao banco de dados MySQL. Sem esta instalação nossos programas não serão capazes de acessar o servidor de banco de dados, mesmo já tendo instalado o Servidor MySQL.

pdf

Clique aqui para conferir como instalar o kit de desenvolvimento do MySQL.

Criar o projeto no Xcode

Agora que já temos toda a infraestrutura preparada, podemos criar o nosso projeto inicial.

pdf

Acompanhe o tutorial de criação do projeto inicial no Xcode clicando aqui.

Estabelecendo a conexão

Qualquer programa que necessite conectar a um Banco de Dados necessita conhecer os parâmetros de conexão. Este tipo de informação é consistente em toda a variedade de Servidores de Banco de Dados. Vamos conhecer quais parâmetros são estes.

Parâmetros da conexão

Os parâmetros para conexão ao banco de dados são cinco. Clique nas abas para conhecê-los.

Tela do projetor de holograma com tecnologia de sistema em nuvem. Imagem da mão de mãos de uma pessoa tocando a tela de um celular.

Fonte: Freepik

o endereço de rede onde o servidor de banco de dados permite conexões

a porta de comunicação de rede, para o MySQL o padrão é 3306

o nome da conta que tem privilégio de conexão e execução de comandos nas bases de dados

a senha para a conta de conexão do banco de dados

o esquema de banco de dados que foi previamente criada no servidor de banco de dados

Para fazer a conexão com o banco de dados, devemos nos certificar de que o esquema do banco de dados já exista, isto é, o banco de dados precisa primeiro ser criado para depois ser conectado. O esquema de Banco de Dados foi estudada pode ser criado com a instrução a seguir.

CREATE SCHEMA nome_do_esquema;

Abra o MySQL Workbench conecte ao Banco de Dados e execute esta instrução definindo o nome_do_esquema que defina o que será armazenado.

Vamos construir uma interface de programação (API) que oferecerá os mecanismos necessários aos programas para o acesso e execução de instruções no Banco de Dados. Iniciamos com os parâmetros de conexão, eles serão armazenados em um arquivo com o formato JSON, por exemplo:

{

"host": "127.0.0.1",

"port": "3306",

"username": "root",

"password": "senai132",

"database": "musicas"

}

Este arquivo com os parâmetros de conexão será chamado connection.json e ficará junto dos programas no projeto Xcode.

API de conexão e acesso

Nosso primeiro passo é criar a API de conexão. Clique no player a seguir e confira.

Clique aqui para baixar a versão PDF do vídeo.

Executando comandos de ação

Nossa API será incrementada com novos métodos conforme a necessidade de mais funcionalidade e, ao final deste projeto, esta API poderá ser utilizada com qualquer estrutura de dados que necessite gravar suas informações em um banco de dados MySQL.

A seguir serão abordados alguns comando de ação no banco de dados. Siga em frente e assista aos vídeos ou leia a versão textual do vídeo se preferir.

Nosso primeiro vídeo é sobre criar estruturas no banco de dados. Clique no player e confira.

Clique aqui para baixar a versão PDF do vídeo.

Agora vamos inserir dados na tabela.Clique no player e confira.

Clique aqui para baixar a versão PDF do vídeo.

No próximo vídeo, acompanharemos o tutorial de como efetuar consultas, então clique no player e confira.

Clique aqui para baixar a versão PDF do vídeo.

Clique no player e assista ao vídeo para saber como fazer atualizações.

Clique aqui para baixar a versão PDF do vídeo.

Exclusão de dados

A exclusão de registros das tabelas segue o mesmo raciocínio ao aplicado na atualização de dados. Para esta atividade vamos excluir um registro na tabela álbuns que não contêm músicas cadastradas.

A instrução SQL a seguir mostra como excluir um registro do nosso exemplo.

DELETE FROM Album WHERE nome = 'Stay Like This';

Vamos criar outro arquivo do tipo Swift agora com o nome RemoverRegistro e implemente o código a seguir:

import Foundation

import SwiftKuery


func removeAlbum() {

let utils = CommonUtils.sharedInstance

let albuns = Albuns()


consulta1()

print("\n- - - - - - - - - - - - - - - - - - - - - - - - \n")


utils.executaQuery(Delete(from: albuns).where(albuns.nome == "Stay Like This"))


consulta1()

}

Para a apagar o registro do álbum, basta passar a instância da classe Albuns na estrutura Delete e informar o critério para a seleção do registro a ser removido.

A função consulta1 permite observarmos a existência do registro antes da execução e a constatação da efetividade da operação após a execução.

Para executarmos esta função deveremos acrescentar sua chamada no programa main da seguinte forma:

import Foundation

//criaTabelas()

//insereDados()

//consulta1()

//consulta2()

//atualizaEstilo()

removeAlbum()

Exclusão de tabelas

Depois de conhecer como remover um registro, agora vamos remover as tabelas. Para nossa atividade, vamos remover todas as tabelas e este procedimento necessita seguir uma sequencia correta para respeitar as regras de associação entre as tabelas.

As instruções SQL para executar esta atividade são:

DROP TABLE Musicas_do_Album;

DROP TABLE Musica;

DROP TABLE Album;

DROP TABLE Estilo;

DROP TABLE Banda;

Vamos preparar nossa classe CommonUtils para processar a execução da remoção das tabelas implementando a seguinte função:

func removeTabela(_ tabela: Table) {

executaQuery(tabela.drop())

}

A função removeTabela recebe uma instância de Table para repassar o resultado da chamada ao método drop como parâmetro de executaQuery, que executará a requisição ao banco de dados.

Agora com nossa API finalizada falta somente implementar a função para processar a remoção de todas as tabelas, crie arquivo Swift com o nome RemoveTabelas e adicione o seguinte código:

import Foundation

import SwiftKuery


func removeTabelas() {

let utils = CommonUtils.sharedInstance


for tabela in [

MusicasDosAlbuns(),

Musicas(),

Albuns(),

Estilos(),

Bandas()

]{

print("Apagando \(tabela.nameInQuery)")

utils.removeTabela(tabela)

}


print("Todas as tabelas foram removidas")

}

Esta função cria a lista das tabelas na ordem correta para a deleção e executa a exclusão, uma a uma, apresentado o seu nome a cada passagem, o nome é extraído da instância da tabela utilizando uma propriedade com o nome nameInQuery.

O programa main receberá um novo ajuste, vamos incluir a chamada a função removeTabelas:

import Foundation


//criaTabelas()

//insereDados()

//consulta1()

//consulta2()

//atualizaEstilo()

//removeAlbum()

removeTabelas()

Após a execução desta função não existem mais tabelas no Bando de Dados. Nosso último ajuste no programa main será tirar todos os comentários para deixar que o programa possa executar todas as operações.

O programa codificado serve como modelo de execução, cada função como um exemplo de como utilizar cada ação no banco de dados e, por fim, uma API pronta para utilização com qualquer outra estrutura de dados que deseje utilizar.

documentação

A fim de prover informações de como utilizar um conjunto de rotinas a documentação é essencial, pois no ambiente de desenvolvimento é possível consultar em tempo real. Também auxilia na manutenção do código pelo motivo de a documentação de uma sub-rotina ficar próxima a implementação deste.

Documentando a API

Agora que terminamos o desenvolvimento de nossa API vamos acrescentar alguma documentação para facilitar a compreensão de sua utilização. Então vejamos o que temos a documentar:

A imagem  de um desenho ilustrando o monitor de um computador com a tela azul. Aso redor da tela, há ícones de novem, uma folha de documento, gráfico em formato pizza, os ícones estão como se saíssem de dentro da tela.

Fonte: Freepik

import Foundation

import SwiftKuery

import SwiftKueryMySQL


class CommonUtils {

private var pool: ConnectionPool?

private var connection: Connection?

static let sharedInstance = CommonUtils()

private init() {}


private func getConnectionPool(characterSet: String? = nil) -> ConnectionPool {...}


func getConnection() -> Connection? {...}


func criaTabela(_ tabela: Table) {...}


func executaQuery(_ query: Query) {...}


func executaConsulta(_ query: Select,_ aoFinal: @escaping ([[Any?]]?)->()) {...}


func removeTabela(_ tabela: Table) {...}

}

Ocultando a implementação dos métodos para termos a visão de toda a estrutura da classe CommonUtils podemos compreender onde poderemos adicionar a documentação. Adicionamos a documentação acrescentando /// antes do texto. Ao descrever os parâmetros acrescentando - Parameter antes de seu nome e descrição. Veja como fica a nossa API com a documentação adicionada:

import Foundation

import SwiftKuery

import SwiftKueryMySQL


/// Esta classe tem as implementações para o acesso ao Banco de Dados

class CommonUtils {

private var pool: ConnectionPool?

private var connection: Connection?

static let sharedInstance = CommonUtils()

private init() {}


/// Este método é de uso interno para a criação do pool de conexões ao bando de dados

private func getConnectionPool(characterSet: String? = nil) -> ConnectionPool {...}


/// Este método obtém a conexão ao banco de dados do pool de conexões

func getConnection() -> Connection? {...}


/// Este método executa uma consulta SQL (SELECT)

/// - Parameter query: Uma instância de Select

/// - Parameter aoFinal: O Bloco de instruções que receberá o retorno do Select

func criaTabela(_ tabela: Table) {...}


/// Este método executa instruções SQL (INSERT, UPDATE, DELETE)

/// - Parameter query: Uma instância de Query (Insert, Update ou Delete)

func executaQuery(_ query: Query) {...}


/// Este método executa a instrução de criação de tabelas (CREATE TABLE)

/// - Parameter tabela: Uma instância de Table

func executaConsulta(_ query: Select,_ aoFinal: @escaping ([[Any?]]?)->()) {...}


/// Este método é utilizado para a exclusão de tabelas (DROP TABLE)

/// - Parameter tabela: Uma instância de Table

func removeTabela(_ tabela: Table) {...}

}

Como é possível constatar adicionar documentação ao código é muito simples. Veja agora como a visualizamos quando estamos codificando:

Imagem mostra uma tela em branco, nela podemos ver como se visualiza quando estamos codificando.

Dica

Pressionado a tecla Option e posicionando o mouse sobre o método, um diálogo é apresentado com a documentação.

Fonte: Pixabay

Vamos Praticar

1. Quais são os parâmetros de conexão ao Banco de Dados?

  1. Endereço, Porta, Tabela, Senha, Registro
  2. Endereço, Porta, Usuário, Senha, Registro
  3. Registro, Porta, Usuário, Senha, Esquema
  4. Endereço, Porta, Usuário, Senha, Esquema

Atenção

Selecione uma alternativa.

Parabéns! Resposta correta.

Endereço, Porta, Usuário, Senha, Esquema são os parâmetros de conexão com o Banco de dados.

Ops! Tente novamente!

Lembre-se de que é essencial determinar onde será a conexão e quem se conectará.

Resposta incorreta.
A resposta correta está representada na alternativa D.

Endereço, Porta, Usuário, Senha, Esquema são os parâmetros de conexão com o Banco de dados. Retome o tópico Parâmetros de conexão..

2. Quais os limites das versões para o Desenvolvimento e dispositivos?

  1. VSCode 1.61 e iOS 12
  2. VSCode 12 e iOS 9
  3. XCode 1.61 e iOS 12
  4. XCode 12 e iOS 9

Atenção

Selecione uma alternativa.

Parabéns! Resposta correta.

XCode 12 e IOS 9 são os limites mínimos para desenvolvimento e dispositivos.

Ops! Tente novamente!

Lembre-se de linguagem, IDE e sistema operacional estão sempre em evolução e é importante definir um limite mínimo para cada um deles.

Resposta incorreta.
A resposta correta está representada na alternativa D.

XCode 12 e IOS 9 são os limites mínimos para desenvolvimento e dispositivos. Retome o tópico Instalar o Xcode e ferramentas de linha de comando do Xcode.

3. Quais são as estruturas utilizadas para efetuar interações do Bando de Dados?

  1. Insert, Create, Update, Delete
  2. Insert, Create, Select, Delete
  3. Insert, Select, Update, Delete
  4. Uptade, Create, Select, Delete

Atenção

Selecione uma alternativa.

Parabéns! Resposta correta.

Insert, Select, Update, Delete são as estruturas utilizadas para efetuar interações com o Banco de dados.

Ops! Tente novamente!

Lembre-se de que dados não são criados no banco de dados, e sim inseridos.

Resposta incorreta.
A resposta correta está representada na alternativa C.

Insert, Select, Update, Delete são as estruturas utilizadas para efetuar interações com o Banco de dados. Retorne ao tópico Executando comandos de ação.

4. Marque verdadeiro ou falso para as afirmações a seguir:

  1. É gratuito para publicar um aplicativo na Apple Store
  2. Verdadeiro

          Falso

  3. A API é destinada a rotinas temporárias pouco utilizadas
  4. Verdadeiro

          Falso

  5. A Documentação é de fácil implementação
  6. Verdadeiro

          Falso

  7. As associações entre as Tabelas devem ser respeitadas
  8. Verdadeiro

          Falso

  9. Ao excluir tabelas devemos ter atenção às associações entre elas
  10. Verdadeiro

          Falso

Atenção

Selecione todas as alternativas.

Parabéns! Resposta correta.

As alternativas C, D e E são verdadeiras, e as outras são falsas.

Ops! Tente novamente!

Esta não é a alternativa correta.

Respostas incorretas.

As alternativas C, D e E são verdadeiras, e as outras são falsas.

Neste desafio...

Banco de Dados em aplicativos Mobile Swift | Desafio 02

Ilustração de um celular com diversos ícones de aplicativos na tela. Na frente dele, uma mão com o indicador esticado simula o uso do dispositivo.

Você estudou:

  • Configuração do projeto
  • Criação Apple ID e conta de desenvolvedor Apple
  • Instalação Xcode
  • Instalação Banco de dados
  • Instalação kit de desenvolvimento MySQL
  • Criação de projeto no Xcode
  • Estabelecendo a conexão
  • Parâmetros de conexão
  • API de conexão e acesso
  • Executando comandos de ação
  • Criação das estruturas no banco de dados
  • Inserindo dados nas tabelas
  • Efetuando consultas
  • Atualizações
  • Exclusão de dados
  • Exclusão das tabelas
  • Documentação

Para concluir...

Parabéns, você concluiu a última etapa da unidade curricular de Banco de Dados em aplicativos mobile com Swift!

Nesta etapa, passamos a conhecer a linguagem de programação Swift e suas particularidades, tais como a declaração de texto e técnica de interpolação, declaração de variáveis e constantes, conhecemos classes, estruturas, enumerações, coleções, tuplas, aprendemos sobre closures, extensões e tipos opcionais, vimos como manipulas datas e horas, por fim vimos protocolos e exceções.

Em seguida, construímos uma API para o acesso e interação ao banco de dados, implementamos as rotinas para criar tabelas, inserir dados, consultar dados, alterar dados, excluir registros e excluir tabelas, também acrescentamos a documentação para a nossa API.

Agora vocês já têm tudo para construir o seu projeto. Continue estudando e se aprimorando.

Até breve e sucesso!

   REFERÊNCIAS
   CRÉDITOS

REFERÊNCIAS

HOFFMAN, Jon. Mastering Swift 5.3. 6a. edição. Birmingham: Packt Publishing, 2020.

MANNING, Jon; BUTTFIELD-ADDISON, Paris. Head First Swift. Massachusetts: O'Reilly Media, Inc., 2021.

NEUBURG, Matt. IOS 14 Programming Fundamentals with Swift. Massachusetts: O'Reilly Media, Inc., 2020.

SWIFT.ORG. Site. Disponível em: . Acesso em: 05 jan. 2022.

Créditos

CONFEDERAÇÃO NACIONAL DA INDÚSTRIA – CNI


Robson Braga de Andrade

Presidente

DIRETORIA DE EDUCAÇÃO E TECNOLOGIA – DIRET


Rafael Esmeraldo Lucchesi Ramacciotti

Diretor de Educação e Tecnologia

SERVIÇO NACIONAL DE APRENDIZAGEM INDUSTRIAL – SENAI – CONSELHO NACIONAL


Robson Braga de Andrade

Presidente

SENAI – DEPARTAMENTO NACIONAL


Rafael Esmeraldo Lucchesi Ramacciotti

Diretor-Geral

Gustavo Leal Sales Filho

Diretor de Operações

SENAI – DEPARTAMENTO NACIONAL

UNIDADE DE EDUCAÇÃO PROFISSIONAL E TECNOLÓGICA – UNIEP

Felipe Esteves Morgado

Gerente Executivo

Luiz Eduardo Leão

Gerente de Tecnologias Educacionais

Anna Christina Theodora Aun de Azevedo Nascimento

Adriana Barufaldi

Bianca Starling Rosauro de Almeida

Laise Caldeira Pedroso

Coordenação Geral de Desenvolvimento dos Recursos Didáticos Nacionais

Senai - Departamento Regional de São Paulo


Ricardo Figueiredo Terra

Diretor Regional

Cassia Regina Souza da Cruz

Gerente de Educação

Izabel Rego de Andrade

Supervisora do Centro SENAI de Tecnologias Educacionais

Claudia Baroni Savini Ferreira

Coordenação do Desenvolvimento do Curso

Wilson Jose de Santana​

Elaboração de Conteúdo

Adilson Moreira Damasceno

Orientador de Práticas de Educação a Distância

Paula Cristina Bataglia Buratini​

Coordenação da Produção do Curso

Cristina Yurie Takahashi​

Design Educacional

Cleriston Ribeiro de Azevedo​

Luiz Tadeu Silva Sansone​

Ilustrações

Camila Ciarini Dias

Produção e Edição de Vídeos

Wesley José Pinto Silveira​

Web Designer

Rafael Santiago Apolinário

Programação

Orientações de Navegação

Veja abaixo as orientações de como navegar pelo curso.

No topo da página é exibido o nome da unidade curricular.

Indicador de progresso da aula.

Acesso aos principais recursos da página.

Direciona ao início do curso, bem antes do primeiro desafio.

Menu com a relação das seções da unidade curricular.

Exibe as orientações de navegação.

Aumenta ou diminui o tamanho da fonte.

Exibe a tela de glossário da unidade.

Ajusta o contraste da tela.

Exibe a tela de créditos do curso.

Orientações para os exercícios:

Os exercícios contidos nos desafios do curso não fazem parte da composição da nota.
Para refazer os exercícios, atualize a página clicando no ícone         , localizado ao lado da barra de endereço do navegador, ou pressione a tecla F5.

Título da seção

Buscar outra seção dentro do desafio

Glossáriospellcheck

-7,7976E+308: Representa um número com uma quantidade grande de casas decimais. Funciona como uma notação científica, ou seja, um número tão grande que é elevado a uma determinada potência. Observe que na precisão fala-se em 15 dígitos.

Compilada: Gera um código em linguagem de máquina.

Funções ou procedimentos: Funções possuem retorno; procedimentos, não. Em POO, ambos são chamados de métodos (com ou sem retorno) e representam o comportamento de uma classe.

IDE: Ambiente de desenvolvimento integrado.

InteliJ: Ferramenta de desenvolvimento.

Interpretada: Executa o código em tempo de execução.

Palavras reservadas: Palavras que são usadas exclusivamente para tipificar dados, não podendo ser usadas para nomenclatura de variáveis ou funções.

Pattern: Solução comprovada para um problema recorrente.

Portável: Executado em diferentes arquiteturas, independentemente de plataforma.

programação concorrente: Paradigma de programação que foca na interação de várias tarefas simultâneas.

Regex: Abreviação do inglês Regular Expression (expressão regular).

Repositório: Local online para armazenar e mostrar seu projeto.

Sistemas distribuídos: Conjunto de dispositivos autônomos, unidos por uma rede de comunicação, que trabalham juntos para realizar uma tarefa. Um sistema distribuído é percebido pelo usuário como um único dispositivo.

String: O “S” de String é maiúsculo, pois uma String representa uma classe de caracteres.

Tipagem forte: A conversão de tipos não é automática.

Versionamento: Sistema para controlar e documentar as versões de seu projeto.

Créditos

CONFEDERAÇÃO NACIONAL DA INDÚSTRIA – CNI


Robson Braga de Andrade

Presidente

DIRETORIA DE EDUCAÇÃO E TECNOLOGIA – DIRET


Rafael Esmeraldo Lucchesi Ramacciotti

Diretor de Educação e Tecnologia

SERVIÇO NACIONAL DE APRENDIZAGEM INDUSTRIAL – SENAI – CONSELHO NACIONAL


Robson Braga de Andrade

Presidente

SENAI – DEPARTAMENTO NACIONAL


Rafael Esmeraldo Lucchesi Ramacciotti

Diretor-Geral

Gustavo Leal Sales Filho

Diretor de Operações

SENAI – DEPARTAMENTO NACIONAL

UNIDADE DE EDUCAÇÃO PROFISSIONAL E TECNOLÓGICA – UNIEP

Felipe Esteves Morgado

Gerente Executivo

Luiz Eduardo Leão

Gerente de Tecnologias Educacionais

Anna Christina Theodora Aun de Azevedo Nascimento

Adriana Barufaldi

Bianca Starling Rosauro de Almeida

Laise Caldeira Pedroso

Coordenação Geral de Desenvolvimento dos Recursos Didáticos Nacionais

Senai - Departamento Regional de São Paulo


Ricardo Figueiredo Terra

Diretor Regional

Cassia Regina Souza da Cruz

Gerente de Educação

Izabel Rego de Andrade

Supervisora do Centro SENAI de Tecnologias Educacionais

Claudia Baroni Savini Ferreira

Coordenação do Desenvolvimento do Curso

Helena Strada Franco de Souza

Vitoria Stefany Bessera Pinho

Elaboração de Conteúdo

Adilson Moreira Damasceno

Orientador de Práticas de Educação a Distância

Paula Cristina Bataglia Buratini​

Coordenação da Produção do Curso

Cristina Yurie Takahashi​

Design Educacional

Luiz Carlos Machi Lozano

Ilustrações

Camila Ciarini Dias

Elton Renato Dos Santos Andrade

Produção e Edição de Vídeos

Gustavo Cardoso de Carvalho

Web Designer

Rafael Santiago Apolinário

Programação

Aviso

Parece que você já iniciou o curso, você pode: